在为 swagger 服务描述呈现路径时如何考虑 servlet 路径映射
How to account for servlet path mapping when rendering paths for swagger service description
我在配置 swagger 时遇到问题。当我在 web.xml 中为 servlet 指定 link 时,例如
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
swagger 显示 url-s 没有 .../rest/... 所以当我指定 url-pattern 时,我不能使用 swagger-ui 进行测试/* swagger-ui 不起作用。这里是配置 class
@Configuration
@EnableSwagger
public class DocumentationController extends WebMvcConfigurerAdapter {
private SpringSwaggerConfig springSwaggerConfig;
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
this.springSwaggerConfig = springSwaggerConfig;
}
@Bean
public SwaggerSpringMvcPlugin customImplementation() {
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(
apiInfo())
.genericModelSubstitutes(ResponseEntity.class)
.includePatterns("/.*");
}
private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo("1-st Project's REST API",
"Write a description of REST API.",
"link",
"mail",
"API License",
"link");
return apiInfo;
}
}
看来您使用的是 2.0.0 之前的 springfox 版本。
这个解决方案有点棘手,而且还没有经过真正的测试,所以不能保证这个工作,但值得一试。
//NOTE: The following code is only an outline to highlight relevant code snippets
@Bean
public SwaggerSpringMvcPlugin plugin() {
new SwaggerSpringMvcPlugin(...)
//more config
.pathProvider(yourPathProvider());
}
private SwaggerPathProvider yourPathProvider() {
SwaggerPathProvider pathProvider = new RelativeSwaggerPathProvider(...);
pathProvider.setApiResourcePrefix("/rest"); //<-- NOTE: this is what you need
return pathProvider;
}
现在如果你搬到 2.x 就容易多了。甚至还有一个 document 描述了如何从 1.x 迁移到 2.x。
@Bean
public Docket plugin() {
new Docket()
//more config
.pathMapping("/rest");
}
另请注意,1.x 没有计划更新。所以迁移到库的 2.0.0 是个好主意。
我在配置 swagger 时遇到问题。当我在 web.xml 中为 servlet 指定 link 时,例如
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
swagger 显示 url-s 没有 .../rest/... 所以当我指定 url-pattern 时,我不能使用 swagger-ui 进行测试/* swagger-ui 不起作用。这里是配置 class
@Configuration
@EnableSwagger
public class DocumentationController extends WebMvcConfigurerAdapter {
private SpringSwaggerConfig springSwaggerConfig;
@Autowired
public void setSpringSwaggerConfig(SpringSwaggerConfig springSwaggerConfig) {
this.springSwaggerConfig = springSwaggerConfig;
}
@Bean
public SwaggerSpringMvcPlugin customImplementation() {
return new SwaggerSpringMvcPlugin(this.springSwaggerConfig).apiInfo(
apiInfo())
.genericModelSubstitutes(ResponseEntity.class)
.includePatterns("/.*");
}
private ApiInfo apiInfo() {
ApiInfo apiInfo = new ApiInfo("1-st Project's REST API",
"Write a description of REST API.",
"link",
"mail",
"API License",
"link");
return apiInfo;
}
}
看来您使用的是 2.0.0 之前的 springfox 版本。
这个解决方案有点棘手,而且还没有经过真正的测试,所以不能保证这个工作,但值得一试。
//NOTE: The following code is only an outline to highlight relevant code snippets
@Bean
public SwaggerSpringMvcPlugin plugin() {
new SwaggerSpringMvcPlugin(...)
//more config
.pathProvider(yourPathProvider());
}
private SwaggerPathProvider yourPathProvider() {
SwaggerPathProvider pathProvider = new RelativeSwaggerPathProvider(...);
pathProvider.setApiResourcePrefix("/rest"); //<-- NOTE: this is what you need
return pathProvider;
}
现在如果你搬到 2.x 就容易多了。甚至还有一个 document 描述了如何从 1.x 迁移到 2.x。
@Bean
public Docket plugin() {
new Docket()
//more config
.pathMapping("/rest");
}
另请注意,1.x 没有计划更新。所以迁移到库的 2.0.0 是个好主意。