public class SwaggerPathProvider extends AbstractPathProvider {
private final String ROOT = "/";
private final ServletContext servletContext;
public SwaggerPathProvider(ServletContext servletContext) {
super();
this.servletContext = servletContext;
}
/**
* 修改swagger默认的basePath获取方法,解决nginx代理导致的二级路径丢失问题
*
* @return basePath
*/
@Override
protected String applicationPath() {
String basePath = ROOT;
// 获取启动类位置。如果是通过jar包启动,会是以"file"开头,如果是通过ide启动是以"/"开头
String applicationClassPath =
MainApplication.class.getProtectionDomain().getCodeSource().getLocation().getPath();
if (applicationClassPath.startsWith("file")) {
// 加上nginx里配置的location
basePath = "/location/api";
}
String contextPath = servletContext.getContextPath();
if (contextPath != null && !contextPath.isEmpty()) {
basePath = basePath + contextPath;
}
return basePath;
}
@Override
protected String getDocumentationPath() {
return ROOT;
}
}
配置Docket的时候将上面的配置注入进去即可。