項目原因:
最近搭建一個新的SpringBoot項目,需要配置Swagger,從其他項目里拷過來knife4j版的Swagger配置文件,結果打開doc.html顯示404,如下圖:
查看日志,錯誤如下:
2020-09-24 17:26:26.518 WARN 15524 --- [nio-8003-exec-1] o.s.web.servlet.PageNotFound : No mapping for GET /doc.html
在官網和其他地方一頓搜,始終沒解決。官網推薦的方法是:https://doc.xiaominfo.com/guide/springboot-404.html
因為doc.html是在jar包里的,需要使用資源處理器注冊靜態資源。
@SpringBootApplication public class SwaggerBootstrapUiDemoApplication implements WebMvcConfigurer{ @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/"); } }
官方的補充說明是:如果你是使用的老的版本SpringBoot,通過繼承WebMvcConfigurationSupport來擴展SpringBoot相關的配置,則把以上配置加在相應的addResourceHandlers方法中即可
在我的WebMvcConfigurer配置類里,加上上面這段代碼不好用。
我在翻閱其他文章里,發現一句有用的話,就是
遇到這種情況請先查找,最近有沒有添加的類繼承了WebMvcConfigurationSupport,則在配置文件在中配置的相關內容會失效,需要重新指定靜態資源。
結果我在本地代碼一搜,果然有一個類繼承了WebMvcConfigurationSupport,我把這個類改成實現WebMvcConfigurer接口,再加上官方推薦的這段代碼,訪問doc.html恢復正常。
看來問題還是新舊版本SpringBoot配置文件 WebMvcConfigurationSupport類 和 WebMvcConfigurer接口之間有沖突,項目中還是只用一個就好了。