Swagger 2& spring MVC - 忽略war上下文路径

时间:2016-08-23 07:29:09

标签: java spring-mvc swagger

我正在使用带有弹簧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

2 个答案:

答案 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(根据Swagger2Controllerhow 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());                                         
    }