Saltar al contenido

Cómo integrar Swagger con Maven + Java + Jersey + Tomcat

Solución:

Siempre que haya copiado correctamente los archivos de https://github.com/wordnik/swagger-ui a su proyecto (directorio dist debe ser copiado a su src/main/webapp), luego puede acceder a la documentación de la API en http://.../MyService/index.html. No olvides modificar index.html para que Swagger sepa dónde cargar los documentos de la API:

window.swaggerUi = new SwaggerUi({
    url: "http://localhost:8080/MyService/rest/api-docs",

La ruta base de la API en su web.xml debe establecerse en http://.../MyService/rest si rest es la ruta de la aplicación que ha definido en su implementación de clase javax.ws.rs.core.Application usando la anotación @ApplicationPath.

Aquí hay un ejemplo de lo que suelo hacer (no uso web.xml para configuración):

@ApplicationPath( "api" )
public class MyRestApplication extends Application

   @Override
   public Set> getClasses( )
   
       Set> resources = new HashSet>( );
       resources.add( ApiListingResource.class );
       resources.add( ApiDeclarationProvider.class );
       resources.add( ApiListingResourceJSON.class );
       resources.add( ResourceListingProvider.class );
       resources.add( Ping.class ); // my own resource class
       swaggerConfiguration( );
       return resources;
   

   private void swaggerConfiguration( )
   
      SwaggerConfig swaggerConfig = new SwaggerConfig( );
      ConfigFactory.setConfig( swaggerConfig );
      swaggerConfig.setApiVersion( "0.0.1" ); 
      swaggerConfig.setBasePath( "http://localhost:8080/MyService/api" );
      ScannerFactory.setScanner( new DefaultJaxrsScanner( ) );
      ClassReaders.setReader( new DefaultJaxrsApiReader( ) );
   

Aquí está el ejemplo más simple usando spring, tomcat, jersey, maven, swagger. A continuación se muestra la estructura del proyecto.

ingrese la descripción de la imagen aquí

Código para HelloWorldService.

package com.rest;
import com.wordnik.swagger.annotations.Api;
import com.wordnik.swagger.annotations.ApiOperation;
import com.wordnik.swagger.annotations.ApiResponse;
import com.wordnik.swagger.annotations.ApiResponses;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

/**
 * Created by neerbans on 11/3/2016.
 */

@Path("/hello")
@Api( value = "/hello", description = "print hello world")
public class HelloWorldService 

    @ApiOperation(
            value = "method api",
            notes = "method api notes"
    )
    @ApiResponses(value = 
            @ApiResponse(code = 200, message = "success"),
            @ApiResponse(code = 500, message = "error")
    )
    @Produces(MediaType.TEXT_PLAIN)
    @GET
    @Path("/param")
    public String getMsg(
            @PathParam("param")
            String msg
    ) 

        String output = "Jersey say : " + msg;

        return output;
    


SwaggerApp.class

package com.rest;

import com.wordnik.swagger.config.ConfigFactory;
import com.wordnik.swagger.config.ScannerFactory;
import com.wordnik.swagger.config.SwaggerConfig;
import com.wordnik.swagger.jaxrs.config.ReflectiveJaxrsScanner;
import com.wordnik.swagger.jaxrs.listing.ApiDeclarationProvider;
import com.wordnik.swagger.jaxrs.listing.ApiListingResource;
import com.wordnik.swagger.jaxrs.listing.ApiListingResourceJSON;
import com.wordnik.swagger.jaxrs.listing.ResourceListingProvider;
import com.wordnik.swagger.jaxrs.reader.DefaultJaxrsApiReader;
import com.wordnik.swagger.reader.ClassReaders;
import org.glassfish.jersey.message.MessageProperties;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.ServerProperties;

import javax.annotation.PostConstruct;

/**
 * Created by neerbans on 11/3/2016.
 */
public class SwaggerApp extends ResourceConfig 

    public SwaggerApp() 
        register(HelloWorldService.class);

        register(ApiListingResource.class);
        register(ApiDeclarationProvider.class);
        register(ApiListingResourceJSON.class);
        register(ResourceListingProvider.class);

        property(MessageProperties.XML_FORMAT_OUTPUT, true);
        property(ServerProperties.TRACING, "ALL");
    

    @PostConstruct
    public void initializeSwaggerConfiguration() 

        final ReflectiveJaxrsScanner scanner = new ReflectiveJaxrsScanner();
        scanner.setResourcePackage("com.rest");
        ScannerFactory.setScanner(scanner);
        ClassReaders.setReader(new DefaultJaxrsApiReader());
        final SwaggerConfig config = ConfigFactory.config();
        config.setApiVersion("1.0");
        config.setBasePath("http://localhost:8080/jax-rs/rest");
    

applicationContext.xml



    
    

Web.xml




  Archetype Created Web Application
    
    
        
        
        
            
            
        
        
    
    
    
        contextConfigLocation
        classpath:applicationContext.xml
    
    
    
        org.springframework.web.context.ContextLoaderListener
    

    
        org.springframework.web.context.request.RequestContextListener
    

    
        Jersey Web Application
        org.glassfish.jersey.servlet.ServletContainer
        
            javax.ws.rs.Application
            com.rest.SwaggerApp
        
        1
    
    
    
        Jersey Web Application
        /rest/*
    

pom.xml


    
        nb
        com.edifecs
        1.0-SNAPSHOT
    
    4.0.0
    jax-rs
    war
    jax-rs Maven Webapp
    http://maven.apache.org
    
        
            junit
            junit
            3.8.1
            test
        
        
            org.glassfish.jersey.containers
            jersey-container-servlet
            2.22.2
        
        
            com.wordnik
            swagger-jaxrs_2.10
            1.3.12
        
        
            org.springframework
            spring-web
            4.1.4.RELEASE
        
    
    
        jax-rs
    

Después de configurar el proyecto. Constrúyalo e implemente el archivo war en la carpeta de aplicaciones web de Tomcat.
Ejecute Tomcat y presione las siguientes URL:

http: // localhost: 8080 / jax-rs / rest / api-docs

Para swagger-ui

http: // localhost: 8080 / jax-rs

los swagger.api.basepath el parámetro es no donde su instalación Swagger mantiene el index.html. Es un parámetro que usa Swagger para ofrecerle la capacidad de llamar a sus puntos finales REST a través de la interfaz de usuario de Swagger, por lo que se representa en los enlaces que usa Swagger.

Descarga la interfaz de usuario de Swagger y la coloca en su WebContent carpeta. A continuación, puede cargar la interfaz de usuario de Swagger en http://localhost:8080/swagger/.

los web.xml debería verse así:


    jersey-servlet
    org.glassfish.jersey.servlet.ServletContainer
    
        javax.ws.rs.Application
        ### Your Application or ResourceConfig ###
     
    
        jersey.config.server.provider.packages
        io.swagger.jaxrs.listing,
                    ### com.your.rest.package ###
        
    

    1



  jersey-servlet
  /rest/*


...



    JerseyJaxrsConfig
    io.swagger.jersey.config.JerseyJaxrsConfig
    
        api.version
        1.0.0
    
    
        swagger.api.basepath
        /MyService/rest
    
    
        scan.all.resources
        true
    
    2

Aquí puedes ver las comentarios y valoraciones de los usuarios

Puedes reafirmar nuestra ocupación escribiendo un comentario o dejando una puntuación te damos la bienvenida.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 3.5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *