目录
这次bug在本地复现后展示出来的。只做简单描述,并提供解决方案。
描述:
1、版本:swagger-version:2.10.5
2、项目路径:项目swagger访问路径localhost:8082/abs/swagger-ui.html
3、context-path设置:abs我在properties定义了context-path
4、真实请求路径为:http://localhost:8082/abs/date
结果 http://localhost:8082/abs/abs/date,项目路径abs重复
探索后原因,这个context-path重复就是swagger版本的一个bug。
解决方案:
1、降低swagger版本,2.7.0就不存在该问题
2、重写bean - PathProvider(方法不太建议)
@Value("${server.servlet.context-path}")
private String servletContextPath;
/**
* 重写 PathProvider ,解决 context-path 重复问题
* @return
*/
@Bean
public PathProvider pathProvider() {
return new DefaultPathProvider() {
@Override
public String getOperationPath(String operationPath) {
operationPath = operationPath.replaceFirst(servletContextPath, "/");
UriComponentsBuilder uriComponentsBuilder = UriComponentsBuilder.fromPath("/");
return Paths.removeAdjacentForwardSlashes(uriComponentsBuilder.path(operationPath).build().toString());
}
@Override
public String getResourceListingPath(String groupName, String apiDeclaration) {
apiDeclaration = super.getResourceListingPath(groupName, apiDeclaration);
return apiDeclaration;
}
};
}
肯定会遇到bean重复问题,因为框架里面已经定义过了,配置一下让bean覆盖即可
spring:
main:
#解决swagger 请求路径context-path重复问题时候bean重复注入问题
allow-bean-definition-overriding: true
3、升级swagger版本,3.0,这个是官方建议的版本
引入依赖
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
登陆网址:(3.0网址变了)
重新调用,问题不在出现