周六工作上要新搭一个工程,但要依赖公司的一套老框架,加了三四天班功能上实现了,但要求弄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(); } }