在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"); } }
有兩種方式: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"); } }