Swagger路线在Spring Boot + Jersey

时间:2016-06-03 04:37:55

标签: java spring spring-boot jersey swagger

我正在尝试将Swagger添加到现有的Spring启动应用程序中,如this教程中所述。

我的主要应用程序类如下:

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

Swagger配置是:

@Configuration
@EnableSwagger2
public class SwaggerConfiguration {
    @Bean
    public Docket api() { 
        return new Docket(DocumentationType.SWAGGER_2)
       .select()
        .apis(RequestHandlerSelectors.any())
        .paths(PathSelectors.any())
        .build();                                           
    }
}

我可以看到Spring显然在启动日志中标识了Swagger及其路由:

s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/v2/api-docs],methods=[GET],produces=[application/json || application/hal+json]}" onto public org.springframework.http.ResponseEntity<springfox.documentation.spring.web.json.Json> springfox.documentation.swagger2.web.Swagger2Controller.getDocumentation(java.lang.String,javax.servlet.http.HttpServletRequest)
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/configuration/ui]}" onto org.springframework.http.ResponseEntity<springfox.documentation.swagger.web.UiConfiguration> springfox.documentation.swagger.web.ApiResourceController.uiConfiguration()
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/configuration/security]}" onto org.springframework.http.ResponseEntity<springfox.documentation.swagger.web.SecurityConfiguration> springfox.documentation.swagger.web.ApiResourceController.securityConfiguration()
s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/swagger-resources]}" onto org.springframework.http.ResponseEntity<java.util.List<springfox.documentation.swagger.web.SwaggerResource>> springfox.documentation.swagger.web.ApiResourceController.swaggerResources()

但是在尝试访问http://localhost:8080/v2/api-docs时,我会得到一个简单的404作为回复。

我在网上找到的所有类似问题都是指那些不使用Spring Boot并且不得不手动映射资源的人(也在同一个教程链接中描述),但这不是我的理由。

任何想法如何解决或 - 至少 - 在哪里进行调查?

1 个答案:

答案 0 :(得分:0)

我发现问题与泽西岛的应用程序路径配置有关。就我而言,通过以下注释:

@Component
@ApplicationPath("/") //WRONG
@Configuration
public class JerseyConfiguration extends ResourceConfig {
...
}

@ApplicationPath配置会覆盖Jersey本身(如whitelabel /error)或第三方库(在本例中为/v2/api-docs/configuration/ui/configuration/security和来自招摇的/swagger-resources。简单地使用/作为路径会强制要求使用我的应用程序中的自定义控制器来解析请求。

@ApplicationPath限制为应用程序所服务的实际路径(在我的情况下为/api)将允许jersey将其他路由绑定到自动生成的控制器:

@Component
@ApplicationPath("/api") //RIGHT
@Configuration
public class JerseyConfiguration extends ResourceConfig {
...
}