傳統ssm專案整合swagger404,swagger彈框
阿新 • • 發佈:2021-12-22
swagger整合彈框、404
週六工作上要新搭一個工程,但要依賴公司的一套老框架,加了三四天班功能上實現了,但要求弄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(); } @Beanpublic Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .enable(true) .apiInfo(apiInfo()) .select() .apis( RequestHandlerSelectors.basePackage("")// 類路徑 ) .paths(PathSelectors.any()) .build(); } }