2016-03-13 3 views
3

Я использую springboot + jersey для веб-спокойной реализации. Теперь я собираюсь интегрировать swagger в наше приложение. Я сделал следующее.Как интегрировать swagger с Джерси + весенний ботинок

я добавил следующие зависимости на build.gradle:

compile('io.springfox:springfox-swagger2:'+springfoxSwaggerVersion) 
compile('io.springfox:springfox-petstore:'+springfoxSwaggerVersion) 
compile('io.springfox:springfox-swagger-ui:'+springfoxSwaggerVersion) 
compile('io.swagger:swagger-jersey2-jaxrs:1.5.8') 

я смог запустить веб-приложение, но я брожу, который URL для чванства? Я пробовал с http://localhost:8080, http://localhost:8080/swagger и http://localhost:8080/swagger-ui.html. Но никто из них не мог получить доступ.

+0

ли в вашей приложение имеет корень контекста? Он должен быть доступен в swagger-ui.html относительно корня контекста. – nerdherd

+0

Корень контекста - это просто «/». –

ответ

0

Может быть, вы используете довольно старую версию springfox, но теперь (для версии 2.4.0) он должен быть настроен очень отличается от кода, см http://springfox.github.io/springfox/docs/current/

Для меня, например, следующей конфигурации springfox:

@Configuration 
@EnableSwagger2 
class SwaggerConfig { 
    @Bean 
    Docket rsApi() { 
     new Docket(DocumentationType.SWAGGER_12) 
      .apiInfo(apiInfo()) 
      .select() 
        .apis(RequestHandlerSelectors.basePackage('com.test.service')) 
      .paths(PathSelectors.any()) 
      .build() 
      .pathMapping('/') 
      .useDefaultResponseMessages(false) 
    } 

    private ApiInfo apiInfo() { 
     new ApiInfoBuilder() 
      .title('Test API') 
      .description('Test API') 
      .version('0.0.10.SNAPSHOT') 
      .termsOfServiceUrl('') 
      .contact('Test company') 
      .license('Public') 
      .licenseUrl('http://example.com/') 
      .build() 
    } 
} 
6

Я думаю, что зависимости и springfox зависимости будут работать, если конечные точки реализованы с использованием Spring MVC вместо реализации JAX-RS.

Я писал о этом несколько месяцев назад, Microservices using Spring Boot, Jersey Swagger and Docker

В принципе, если вам нужно документировать Джерси Реализуемых конечных точек, вам нужно будет:

1) Убедитесь, что ваши Spring Загрузочным приложения сканирует для компоненты, расположенные в отдельных пакетах (т.е. com.asimio.jerseyexample.config) с помощью:

@SpringBootApplication(
    scanBasePackages = { 
     "com.asimio.jerseyexample.config", "com.asimio.jerseyexample.rest" 
    } 
) 

2) реализации класса конфигурации Джерси:

package com.asimio.jerseyexample.config; 
... 
@Component 
public class JerseyConfig extends ResourceConfig { 

    @Value("${spring.jersey.application-path:/}") 
    private String apiPath; 

    public JerseyConfig() { 
     // Register endpoints, providers, ... 
     this.registerEndpoints(); 
    } 

    @PostConstruct 
    public void init() { 
     // Register components where DI is needed 
     this.configureSwagger(); 
    } 

    private void registerEndpoints() { 
     this.register(HelloResource.class); 
     // Access through /<Jersey's servlet path>/application.wadl 
     this.register(WadlResource.class); 
    } 

    private void configureSwagger() { 
     // Available at localhost:port/swagger.json 
     this.register(ApiListingResource.class); 
     this.register(SwaggerSerializers.class); 

     BeanConfig config = new BeanConfig(); 
     config.setConfigId("springboot-jersey-swagger-docker-example"); 
     config.setTitle("Spring Boot + Jersey + Swagger + Docker Example"); 
     config.setVersion("v1"); 
     config.setContact("Orlando L Otero"); 
     config.setSchemes(new String[] { "http", "https" }); 
     config.setBasePath(this.apiPath); 
     config.setResourcePackage("com.asimio.jerseyexample.rest.v1"); 
     config.setPrettyPrint(true); 
     config.setScan(true); 
    } 
} 

3) внедрение ресурсов с использованием JAX-RS (Jersey) и чванство аннотаций:

package com.asimio.jerseyexample.rest.v1; 
... 
@Component 
@Path("/") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
@Api(value = "Hello resource", produces = "application/json") 
public class HelloResource { 

    private static final Logger LOGGER = LoggerFactory.getLogger(HelloResource.class); 

    @GET 
    @Path("v1/hello/{name}") 
    @ApiOperation(value = "Gets a hello resource. Version 1 - (version in URL)", response = Hello.class) 
    @ApiResponses(value = { 
     @ApiResponse(code = 200, message = "Hello resource found"), 
     @ApiResponse(code = 404, message = "Hello resource not found") 
    }) 
    public Response getHelloVersionInUrl(@ApiParam @PathParam("name") String name) { 
     LOGGER.info("getHelloVersionInUrl() v1"); 
     return this.getHello(name, "Version 1 - passed in URL"); 
    } 
... 
} 

4) Убедитесь, что файл конфигурации Spring загрузки вашего приложения делает различие между Spring MVC (для конечных точек привода) и Джерси (для ресурсов) конечные точки:

application.yml

... 
# Spring MVC dispatcher servlet path. Needs to be different than Jersey's to enable/disable Actuator endpoints access (/info, /health, ...) 
server.servlet-path:/
# Jersey dispatcher servlet 
spring.jersey.application-path: /api 
... 
Смежные вопросы