Как интегрировать springfox-swagger2 с jersey в Springboot

Я использую Springboot с трикотажем в качестве успокаивающего API. Теперь я хочу интегрировать swagger2 в свой проект, но это не работает. Когда я запускаю свое приложение и получаю доступ к http://localhost:8080/swagger-ui.html . У меня есть веб-страница swagger, но api не отображается (см. Изображение ниже). Кажется, что чванство не нашло мои классы api.

введите здесь описание изображения

Ниже приведены зависимости, которые я добавил.

compile "io.springfox:springfox-swagger2:2.5.0"
compile 'io.springfox:springfox-swagger-ui:2.5.0'

Ниже мой класс приложения:

@SpringBootApplication
@EnableSwagger2
@EnableAutoConfiguration
@Configuration
@ComponentScan(value = "com.ticket.api")
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }


    @Bean
    public Docket documentation() {
        return new Docket(DocumentationType.SWAGGER_2)
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.lenovo.ticket.api"))
                .paths(PathSelectors.any())

                .build().pathMapping("/")
                .useDefaultResponseMessages(false);
    }

    @Bean
    UiConfiguration uiConfig() {
        return UiConfiguration.DEFAULT;
    }

}

Ниже приведен мой класс конфигурации трикотажа:

@Configuration
@ApplicationPath("/ticket")
public class JerseyConfig extends ResourceConfig  {

    public JerseyConfig(){
        register(Helloworld.class);
    }

}

person Joey Yi Zhao    schedule 22.07.2016    source источник


Ответы (2)


Джерси не поддерживается, см. этот ответ. Учитывая, что ответ исходит от автора библиотеки SpringFox, я бы сказал, что информация достоверная.

person Miloš Milivojević    schedule 22.07.2016

Как ранее было сказано в этом потоке, @EnableSwagger2 аннотация и springfox зависимости будут работать, если конечные точки будут реализованы с использованием Spring MVC вместо Jersey.

Чтобы задокументировать конечные точки, реализованные в Джерси:

1) Убедитесь, что ваше приложение Spring Boot сканирует компоненты, расположенные в определенных пакетах (например, 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 (Джерси) и Swagger:

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 Boot вашего приложения различает конечные точки Spring MVC (для конечных точек привода) и Jersey (для ресурсов):

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
...

Эти шаги лучше описаны в сообщении блога, которое я создал некоторое время назад, Микросервисы с использованием Spring Boot, Jersey Swagger и Docker

Он ссылается на исходный код в моем репозитории Bitbucket и на работающий пример

person ootero    schedule 22.09.2016