以前,咱們介紹過@ModelAttribute
和@ExceptionHandler
,前者能夠往請求的Model里加數據,後者能夠接受請求處理方法拋出的異常。可是他們放在控制器(Controller)裏的時候,做用範圍是有限的,只管當前控制器裏的方法。若是你有幾百個控制器,在每一個控制器裏都加上相似的代碼,難免有點冗餘和費勁兒。Spring框架提供了@ControllerAdvice
註解,幫助你將其應用到全部的控制器上。spring
Controller Advice字面上意思是「控制器通知」,Advice除了「勸告」、「意見」以外,還有「通知」的意思。你能夠將@ModelAttribute
和@ExceptionHandler
標記的方法提取出來,放到一個類裏,並將加上@ControllerAdvice
,這樣,全部的控制器均可以用了:app
由於@ControllerAdvice
被元註解@Component
標記,因此它也是能夠被組件掃描掃到並放入Spring容器的。框架
若是你只想對一部分控制器添加通知,好比某個包下的控制器,能夠這樣寫:spring-boot
若是你不想把包名寫死,不如把包裏的某個類傳進去,這樣包名重構了也不怕:post
若是你只想對某幾個控制器添加通知,能夠這樣寫:ui
挺簡單的是否是?code
通知裏的@ModelAttribute
方法會先於控制器裏執行。通知裏的@ExceptionHandler
方法優先級會低於控制器裏的。仔細想一想就能明白,局部的要優先於全局的。cdn
控制器通知還有一個兄弟,@RestControllerAdvice
,若是用了它,錯誤處理方法的返回值不會表示用的哪一個視圖,而是會做爲HTTP body處理,即至關於錯誤處理方法加了@ResponseBody
註解。blog
原文連接:fookwood.com/spring-boot…get