Spring Boot 2.0踩坑筆記

1、擴展Spring MVC

在springboot2.0以前 咱們若是須要擴展SpringMvc,通常是繼承 WebMvcConfigurerAdapter 來實現url的定向,html

@Configuration
public class MyMvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        //瀏覽器發送 /test 請求來到 success
        registry.addViewController("/test").setViewName("success");
    }
}

在springboot 2.0之後 WebMvcConfigurerAdapter 這個方法已通過時,那怎麼來修改呢?

有兩種方式:java

第一種 :繼承WebMvcConfigurationSupport這個類,重寫父類的方法便可。可是這種方式是有問題的,這種方式會屏蔽Spring Boot的@EnableAutoConfiguration中的設置。web

緣由:WebMvcAutoConfiguration會先判斷若是不存在WebMvcConfigurationSupport類纔會生效。spring

@Configuration
@ConditionalOnWebApplication(
    type = Type.SERVLET
)
@ConditionalOnClass({Servlet.class, DispatcherServlet.class, WebMvcConfigurer.class})
@ConditionalOnMissingBean({WebMvcConfigurationSupport.class})
@AutoConfigureOrder(-2147483638)
@AutoConfigureAfter({DispatcherServletAutoConfiguration.class, ValidationAutoConfiguration.class})
public class WebMvcAutoConfiguration {

這時候啓動項目時會發現映射根本沒有成功,讀取不到靜態的資源也就是說application.properties中添加配置的映射配置沒有啓動做用,而後咱們會想到重寫來進行映射:瀏覽器

@Configuration
public class myMvcConfig extends WebMvcConfigurationSupport{
 
    @Bean
    public WebMvcConfigurationSupport webMvcConfigurationSupport(){
        WebMvcConfigurationSupport support = new WebMvcConfigurationSupport(){
            @Override
            protected void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/").setViewName("login");
                registry.addViewController("/main.html").setViewName("dashboard");
                // registry.addViewController("/login.html").setViewName("login");
            }
 
            @Override
            public void addResourceHandlers(ResourceHandlerRegistry registry) {
                //registry.addResourceHandler("/resources/static/**").addResourceLocations("classpath:/static/");
                registry.addResourceHandler("/static/**").addResourceLocations("classpath:/resources/static/");
                super.addResourceHandlers(registry);
            }
        };
        return support;
    }

第二種:實現WebMvcConfigurer這個接口,(推薦使用這種)springboot

@Configuration
public class MyWebMvcConfigurationAdapter implements WebMvcConfigurer{
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/test").setViewName("success");
    }
}
相關文章
相關標籤/搜索