在上篇文章中,咱們遇到了接口WebMvcConfigurer。今天就來大概看一下里面的方法都有什麼吧。前端
WebMvcConfigurer是一個接口,提供不少自定義的攔截器,例如跨域設置、類型轉化器等等。能夠說此接口爲開發者提早想到了不少攔截層面的需求,方便開發者自由選擇使用。因爲Spring5.0廢棄了WebMvcConfigurerAdapter,因此WebMvcConfigurer繼承了WebMvcConfigurerAdapter大部份內容。web
因爲內容太多,只展現3個關鍵的接口,用的比較少的,只是闡述下含義,再也不詳解,用的更少的,就不看了,畢竟十多個方法呢...數據庫
這個用到的比較少,這個是和訪問路徑有關的。舉個例子,好比說PathMatchConfigurer 有個配置是setUseTrailingSlashMatch(),若是設置爲true的話(默認爲true),後面加個斜槓並不影響路徑訪問,例如「/user」等同於「/user/"。咱們在開發中不多在訪問路徑上搞事情,因此這個方法若是有須要的請自行研究吧。後端
這個東西直譯叫作內容協商機制,主要是方便一個請求路徑返回多個數據格式。ContentNegotiationConfigurer這個配置裏面你會看到MediaType,裏面有衆多的格式。此方法不在多贅述。跨域
顧名思義,這是處理異步請求的。只能設置兩個值,一個超時時間(毫秒,Tomcat下默認是10000毫秒,即10秒),還有一個是AsyncTaskExecutor,異步任務執行器。服務器
這個接口能夠實現靜態文件能夠像Servlet同樣被訪問。mvc
增長轉化器或者格式化器。這邊不只能夠把時間轉化成你須要時區或者樣式。還能夠自定義轉化器和你數據庫作交互,好比傳進來userId,通過轉化能夠拿到user對象。app
盼望着,盼望着,你一個經常使用的方法來了。這個方法能夠自定義寫攔截器,並指定攔截路徑。來,我們寫一個攔截器。cors
public class MyInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle,ok,假設給你一個true,運行去吧"); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle,ok,看看我何時運行的。"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion,ok,看完不點個贊再走嗎?"); } }
而後配置一下:前後端分離
@Configuration public class MyConfigurer implements WebMvcConfigurer { @Bean public MyInterceptor getMyInterceptor(){ return new MyInterceptor(); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(this.getMyInterceptor()) .addPathPatterns("/abc","/configurePathMatch"); } }
能夠看出addPathPatterns()裏面能夠嘗試添加多個路徑,或者寫成」/**「,包含全部路徑都須要嘗試攔截一下。
測試一下,輸出:
preHandle,ok,假設給你一個true,運行去吧 ===》執行業務邏輯===》 postHandle,ok,看看我何時運行的。 afterCompletion,ok,看完不點個贊再走嗎?
自定義資源映射。這個東西也比較經常使用,業務場景就是本身的服務器做爲文件服務器,不利用第三方的圖牀,就須要一個虛擬路徑映射到咱們服務器的地址。值得一提的是,若是你的項目是war包啓動,通常都是再Tomcat中配置一下(配置方法請百度);若是是jar包啓動(SpringBoot常常用這種方式啓動),就能夠用到這個方法了。例如:
public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/my/**") .addResourceLocations("file:E:/my/"); super.addResourceHandlers(registry); }
真實路徑,wndows當服務器的狀況下,前面必定要加上一個file:。
這個是設置跨域問題的,幾乎是每一個後臺服務器都須要配置的東西。我曾寫過一篇文章,專門講跨域問題和SpringBoot怎麼配置的,請查詢:
https://juejin.im/post/5cfe6367f265da1b9163887f
這個方法能夠實現,一個路徑自動跳轉到一個頁面。不過如今多爲先後端分離的項目,是否是能夠把跳轉路由的問題直接扔給前端。
後面還有七個:configureViewResolvers、addArgumentResolvers、addReturnValueHandlers、configureMessageConverters、extendMessageConverters、configureHandlerExceptionResolvers、extendHandlerExceptionResolvers。是在用的太少了,就再也不看了。
本篇先大概知道下這些都是什麼方法,最重要的是知道了WebMvcConfigurer爲咱們再攔截層作了一些通用攔截器,方便開發者使用。固然也能夠本身實現攔截器。最經常使用的是仍是六、七、8。其餘的之後有機會研究好了再更新。