javascript
Spring Boot教程(11) – 理解注解@ControllerAdvice
之前,我們介紹過@ModelAttribute和@ExceptionHandler,前者可以往請求的Model里加數據,后者可以接受請求處理方法拋出的異常。但是他們放在控制器(Controller)里的時候,作用范圍是有限的,只管當前控制器里的方法。如果你有幾百個控制器,在每個控制器里都加上類似的代碼,不免有點冗余和費勁兒。Spring框架提供了@ControllerAdvice注解,幫助你將其應用到所有的控制器上。
Controller Advice字面上意思是“控制器通知”,Advice除了“勸告”、“意見”之外,還有“通知”的意思。你可以將@ModelAttribute和@ExceptionHandler標記的方法提取出來,放到一個類里,并將加上@ControllerAdvice,這樣,所有的控制器都可以用了:
因為@ControllerAdvice被元注解@Component標記,所以它也是可以被組件掃描掃到并放入Spring容器的。
如果你只想對一部分控制器添加通知,比如某個包下的控制器,可以這樣寫:
如果你不想把包名寫死,不如把包里的某個類傳進去,這樣包名重構了也不怕:
如果你只想對某幾個控制器添加通知,可以這樣寫:
挺簡單的是不是?
通知里的@ModelAttribute方法會先于控制器里執行。通知里的@ExceptionHandler方法優先級會低于控制器里的。仔細想想就能明白,局部的要優先于全局的。
控制器通知還有一個兄弟,@RestControllerAdvice,如果用了它,錯誤處理方法的返回值不會表示用的哪個視圖,而是會作為HTTP body處理,即相當于錯誤處理方法加了@ResponseBody注解。
原文鏈接:fookwood.com/spring-boot…
轉載于:https://juejin.im/post/5d2076085188250fcf17bf6d
總結
以上是生活随笔為你收集整理的Spring Boot教程(11) – 理解注解@ControllerAdvice的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于lol狮子傲之追猎者纯输出出装的问题
- 下一篇: 刺青剧情介绍