我正在使用带有弹簧mvc的swagger 2。
war文件是web-app.war,Swagger基本网址显示为public static Date dateFormatter(String dateString, String dateFormat) {
SimpleDateFormat setDateFormatter = new SimpleDateFormat(dateFormat, Locale.ENGLISH);
Date formattedDate = null;
if (!dateString.isEmpty()) {
try {
formattedDate = setDateFormatter.parse(dateString);
} catch (ParseException e) {
Log.e(TAG, "Parse Exception Error : " + e.getMessage());
}
}
return formattedDate;
}
我想删除war上下文路径,以便api调用可以作为
/web-app/rest/api
和不 example.com/rest/api
SwaggerConfig.java
example.com/web-app/rest/api
答案 0 :(得分:1)
如果/web-app
是您的上下文根(您可以在IDE中更改它,在线提供大量有关如何操作的教程) - 那么您无法将项目元素置于其之外。
要实现您的目标,您可以将上下文根设置为/
,然后使用web-app
为REST服务添加前缀。这保留了相同的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 */
}
答案 1 :(得分:1)
要解决此问题,需要更改Docket的主机属性。否则,将根据请求网址确定basePath(根据Swagger2Controller和how to change base path for swagger)
@Bean
public Docket api(ServletContext servletContext) throws LoadPropertiesException {
String host = "example.com";
String applicationBasePath = null;
return new Docket(DocumentationType.SWAGGER_2)
.groupName("My API").host(host).pathProvider(new RelativePathProvider(servletContext) {
@Override
public String getApplicationBasePath() {
return applicationBasePath;
}
})
.select()
.apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.boot"))) .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.cloud"))) .apis(Predicates.not(RequestHandlerSelectors.basePackage("org.springframework.data.rest.webmvc")))
.build()
.apiInfo(apiInfo());
}