传统ssm项目集成swagger404,swagger弹框

周六工作上要新搭一个工程,但要依赖公司的一套老框架,加了三四天班功能上实现了,但要求弄swagger文档的时候有点问题。

访问ip:port/xxx/swagger-ui.html 的时候弹框提示,然后我F12 看了一下是有个接口请求404:

 

有请求那问题就很好解决了,猜测一下,结合弹框提示大概可以猜出提示是因为这个接口404,再看下springmvc拦截器的配置:

问题原因:

可以看到我这里使用的是拦截 /api/*的请求,所以swagger的jar包中的接口也要url匹配为 /api/*的才会被转发,很明显swagger页面的请求是跟页面上下文关联的

所以试一下  ip:port/xxx/api/swagger-resources/configuration/ui、ip:port/xxx/api/crop-etax/api/v2/api-docs 两个请求,均有返回:

再试下ip:port/xxx/api/swagger-ui.html这个页面404

那就有办法了,一种是拦截请求的时候把 swagger的请求给拦了,或暴力一点 servlet-mapping 拦 /* 

当然上述方法我不推荐

拦/* 的话可能会导致访问静态资源404 ,那最合适的解决办法是在项目的 mvc配置文件中增加 swagger的静态资源:

 <mvc:resources location="classpath:/META-INF/resources/" mapping="swagger-ui.html"/>
    <mvc:resources location="classpath:/META-INF/resources/webjars/" mapping="/webjars/**"/>

 SwaggerConfig:

@Configuration
@EnableSwagger2
@EnableWebMvc
public class SwaggerConfig  {

    @Bean
    public ApiInfo apiInfo(){
        return new ApiInfoBuilder()
                .title("企业集团")
                .description("")
                .version("1.0.0")
                .build();
    }
    @Bean
    public Docket docket(){
        return new Docket(DocumentationType.SWAGGER_2)
                .enable(true)
                .apiInfo(apiInfo())
                .select()

                .apis(
                        RequestHandlerSelectors.basePackage("")// 类路径
                )
                .paths(PathSelectors.any())
                .build();
    }


}
原文地址:https://www.cnblogs.com/notably/p/15719610.html