1. 程式人生 > >記錄一下spring boot 配置swagger出現404

記錄一下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 引發的思考,希望能給大家一下幫助,也為了以後自己能夠方便複習。