記錄一下spring boot 配置swagger出現404
1、直接根據網上的配置,一個新建的spring boot 專案配置swagger是可以訪問的,但是如果你配置了
extends WebMvcConfigurationSupport 這樣你的自動配置就失敗了,我看了很多網上提到的點,就是說
extends WebMvcConfigurationSupport,,這種方式會遮蔽springboot的@EnableAutoConfiguration中的設定,有些文章好一點會告訴你位置,而我自己來試著找到該位置,然後試著解決一下這個自動配置失效,自行自定義配置。
我使用的是idea,然後:: Spring Boot :: (v2.1.1.RELEASE)
1、依賴中找到如下圖所示的自動配置的jar
2、找到
3、點選進入
很多項,我可以告訴你搜mvc,你就好找一些
上圖你應該在很多文章中可以看到,找到後,你就可以自己分析一下,這邊我就不多說了
下面做些測試:
controller測試
靜態頁面測試:
org.springframework.boot.autoconfigure.web.ResourceProperties中提到了
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = new String[]{"classpath:/META-INF/resources/", "classpath:/resources/", "classpath:/static/", "classpath:/public/"};
那麼我在static中放hello.html
說明我們就是在使用自動配置,現在開始就著前面所說,來取消掉我們自動配置。
現在重啟後訪問我的lys.html
結果:可以訪問,試著訪問我的hello.html
結果無法訪問,自行接天static路徑
所以新增兩個是不行的吧,至少不能像我這樣。
PS:如果有留心,會發現
1. 在SpringBoot1.X的版本中,我們可以繼承自WebMvcConfigurerAdapter,覆蓋想要實現的方法即可。
2. 但是在SpringBoot2.X的定義中,WebMvcConfigurerAdapter已經被定義為@Deprecated
被廢棄了,但是可以直接實現介面來達到你想要的功能。
下面試著使用網上的方法:使用:
繼承 WebMvcConfigurerAdapter保留自動配置,只需要重寫方法即可。
現在來試一下
再試一個configureViewResolvers
做些準備
spring boot預設使用thymeleaf 不推薦使用jsp,由於使用比較多的就是jsp,所以整合一下jsp支援
spring boot專案無法新建jsp檔案請檢視:
https://www.cnblogs.com/sxdcgaq8080/p/7676294.html
spring boot 配置jsp請看:
https://www.cnblogs.com/peterxiao/p/7826427.html
跟著上面的學習,我是配置出來了,如下:
pom檔案
<!--整合一下jsp-->
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<!--<scope>provided</scope>-->
</dependency>
<!-- jstl標籤庫 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>
application.properties檔案
資源結構(連線中會提)
index.jsp
啟動訪問:
做上面的所有,只是為了試一下
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
}
註釋配置
#spring.mvc.view.prefix=/WEB-INF/jsp/
#spring.mvc.view.suffix=.jsp
使用java配置
@Bean
public ViewResolver internalResourceViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix("/WEB-INF/jsp/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
配置到這就已經實現效果了
那
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.viewResolver(internalResourceViewResolver());
}
為什麼還要配置
PS:我覺得就是不加@bean,然後使用上面方式新增,和使用@bean,spring 幫我們添加了,也是未可知。
繼續試一下
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/hehe").setViewName("index");
}
效果出來了,但是沒有資料,這是必然的,因為我們只是添加了路徑與檢視,並沒有資料處理。
這種用的不多,學習與快速測試時可能用到。
做得這些擴充套件,回到前面的話題,使用extends WebMvcConfigurationSupport 替換 implements WebMvcConfigurer
public class WxWebMvcConfiguration extends WebMvcConfigurationSupport {
測試效果是一樣的。
回到swagger,發現無法訪問404
追根溯源:
而我的配置是
// swagger 是無法訪問的 registry.addResourceHandler("/**").addResourceLocations("classpath:/lys/");
加上:
registry.addResourceHandler("/**") .addResourceLocations("classpath:/static/"); registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("classpath:/META-INF/resources/webjars/"); super.addResourceHandlers(registry);
即可
以上就是我由這個swagger 404 引發的思考,希望能給大家一下幫助,也為了以後自己能夠方便複習。