SpringBoot---WebMvcConfigurer詳解
1.前言
在Spring Boot 1.5版本都是靠重寫WebMvcConfigurerAdapter的方法來添加自定義攔截器,消息轉換器等。SpringBoot 2.0 后,該類被標記為@Deprecated(棄用)。
官方推薦直接實現WebMvcConfigurer或者直接繼承WebMvcConfigurationSupport
繼承WebMvcConfigurationSupport類:【鏈接】
https://blog.csdn.net/fmwind/article/details/82832758
2.WebMvcConfigurer接口
/* 攔截器配置 */
void addInterceptors(InterceptorRegistry var1);
/* 視圖跳轉控制器 */
void addViewControllers(ViewControllerRegistry registry);
/** *靜態資源處理**/
void addResourceHandlers(ResourceHandlerRegistry registry);
/* 默認靜態資源處理器 */
void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer);
/*** 這里配置視圖解析器**/
void configureViewResolvers(ViewResolverRegistry registry);
/* 配置內容裁決的一些選項*/
void configureContentNegotiation(ContentNegotiationConfigurer configurer);
/** 解決跨域問題 **/
public void addCorsMappings(CorsRegistry registry) ;
2.1 addInterceptors:攔截器
l addInterceptor:需要一個實現HandlerInterceptor接口的攔截器實例
l addPathPatterns:用於設置攔截器的過濾路徑規則;addPathPatterns("/**")對所有請求都攔截
l excludePathPatterns:用於設置不需要攔截的過濾規則
l 攔截器主要用途:進行用戶登錄狀態的攔截,日志的攔截等。
【如上圖所述,設置了不需要攔截的過濾規則,開頭如果不是adminApi開頭的路徑直接404送走。不進行請求】
2.2 addViewControllers:頁面跳轉
以前寫SpringMVC的時候,如果需要訪問一個頁面,必須要寫Controller類,然后再寫一個方法跳轉到頁面,感覺好麻煩,其實重寫WebMvcConfigurer中的addViewControllers方法即可達到效果了
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/toLogin").setViewName("login");
}
值的指出的是,在這里重寫addViewControllers方法,並不會覆蓋WebMvcAutoConfiguration(Springboot自動配置)中的addViewControllers(在此方法中,Spring Boot將“/”映射至index.html),這也就意味着自己的配置和Spring Boot的自動配置同時有效,這也是我們推薦添加自己的MVC配置的方式。
2.3 addResourceHandlers:靜態資源
比如,我們想自定義靜態資源映射目錄的話,只需重寫addResourceHandlers方法即可。
注:如果繼承WebMvcConfigurationSupport類實現配置時必須要重寫該方法
addResoureHandler:指的是對外暴露的訪問路徑
addResourceLocations:指的是內部文件放置的目錄
2.4 configureDefaultServletHandling:默認靜態資源處理器
2.5 configureViewResolvers:視圖解析器
這個方法是用來配置視圖解析器的,該方法的參數ViewResolverRegistry 是一個注冊器,用來注冊你想自定義的視圖解析器等。
ViewResolverRegistry 常用的幾個方法:https://blog.csdn.net/fmwind/article/details/81235401
2.6 addCorsMappings:跨域
2.7 configureMessageConverters:信息轉換器