我们有一个基本的 spring boot api 服务,它公开 REST 端点,例如https://myservice.com/customer/get 和 https://myservice.com/country/get
我们集成了 swagger,但 swagger 的 URL 是根。
例如https://myservice.com/swagger-ui.html
而且所有swagger各种资源也都在根目录下(比如webjars)
由于我们的服务位于代理后面,因此我们需要一个针对所有 swagger 资源的规则,例如 /swagger/*
有没有办法让 swagger (及其资源)从特定路径而不是根路径获得服务?
这是我们的 SpringFoxConfig.java:
@Configuration
@EnableSwagger2
@Profile({"!prod && swagger"})
public class SpringFoxConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("OUR-API")
.description("Our api service endpoints")
.version("mixed")
.build();
}
}
这是 WebAppConfig.java
@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
swagger 从 root 提供哪些资源的示例,我们需要将其移动到 /swagger/ 或类似的位置:
我们的 swagger 版本(版本 3 无法运行,所以我们使用 2.8)
<dependencies>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.8.0</version>
</dependency>
更新您的 WebAppConfig
@Configuration
@EnableWebMvc
public class WebAppConfig extends WebMvcConfigurerAdapter {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger/swagger-ui.html")
.addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/swagger/webjars/**")
.addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
还有你的application.properties
springfox.documentation.swagger.v2.path=/swagger/api-docs
springfox.documentation.swagger-ui.base-url=/swagger