【问题标题】:How to account for servlet path mapping when rendering paths for swagger service description在为 swagger 服务描述渲染路径时如何考虑 servlet 路径映射
【发布时间】:2015-05-04 18:53:34
【问题描述】:

我在配置 swagger 时遇到问题。当我在 web.xml 中为 servlet 指定链接时,例如

<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

swagger 显示没有 .../rest/... 的 url-s 所以我不能使用 swagger-ui 进行测试,当我指定 url-pattern /* swagger-ui 不起作用。这里是配置类

@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;
    }

}

【问题讨论】:

  • 我认为你应该向我们展示你的 swagger-ui JS 配置。
  • @RC。我是js新手,可以是什么文件?
  • 这与swagger-ui配置无关。这与 swagger-springmvc/springfox 中的 basePath 配置有关(无论 @user3378876 使用的是哪个)。
  • @RC。好的,当我在 url-pattern 参数中指定非空值但我无法测试时它可以工作,因为 swagger 写入 url 时没有值。例如:我指定 url-pattern 参数 /rest/* 并且 swagger 只显示 /login 而不是 /rest/login 所以 swagger-ui 不能正常工作

标签: java spring-mvc jakarta-ee swagger swagger-ui


【解决方案1】:

看来您使用的是 springfox 2.0.0 之前的版本。

这个解决方案有点棘手,并且没有经过真正的测试,所以不能保证它的工作原理,但值得一试。

//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 是个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-19
    • 2010-09-22
    • 2012-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多