我正在使用带有 spring mvc 的 swagger 2。
war 文件是 web-app.war,Swagger 基本 URL 显示为 /web-app/rest/api
我想删除 war 上下文路径,这样 api 调用就可以作为
example.com/rest/api
和不是 example.com/web-app/rest/api
SwaggerConfig.java
@Configuration
@EnableWebMvc
@EnableSwagger2
public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Bean
public Docket api() {
// @formatter:off
return new Docket(DocumentationType.SWAGGER_2)
.useDefaultResponseMessages(false)
.pathMapping("/")
.select()
.apis(RequestHandlerSelectors.any())
.build().apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder().title("Rest API")
.description("Describes the restful interface")
.build();
}
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}
}
最佳答案
如果 /web-app
是您的上下文根(您可以在您的 IDE 中更改它,网上有大量教程介绍如何进行更改)——那么您无法放置一个元素你的项目在那之外。
要实现您想要的效果,您可以将上下文根设置为 /
,然后在您的 REST 服务前加上 web-app
。这将保留相同的 REST 路径,但将 Swagger API 置于 /rest/api
。
编辑
如果您认为 Springfox 错误地确定了您的基本路径,您可以将 PathProvider
添加到 Docket
定义中:
return new Docket(DocumentationType.SWAGGER_2)
/*other options*/
.pathProvider(new PathProvider(){
String getApplicationBasePath(){
return "/";
}
/*implement other methods or extend RelativePathProvider or Absolute PathProvider instead */
}
关于java - Swagger 2 & spring MVC - 忽略 war 上下文路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39094927/