1. 程式人生 > 其它 >傳統ssm專案整合swagger404,swagger彈框

傳統ssm專案整合swagger404,swagger彈框

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();
    }
    @Bean
    
public Docket docket(){ return new Docket(DocumentationType.SWAGGER_2) .enable(true) .apiInfo(apiInfo()) .select() .apis( RequestHandlerSelectors.basePackage("")// 類路徑 ) .paths(PathSelectors.any()) .build(); } }