1. 程式人生 > >Spring 註解學習手札(八)補遺——@ExceptionHandler

Spring 註解學習手札(八)補遺——@ExceptionHandler

Spring註解,改變了我的開發思路。前段時間,用@RequestBody@ResponseBody,不費吹灰之力就解決了JSon自動繫結。接著就發現,如果遇到RuntimeException,需要給出一個預設返回JSON。 

以前都是用SimpleMappingExceptionResolver攔截實現,今天偶爾看下資料,@ExceptionHandler,就把這個異常給攔截了,太方便了! 

直接上程式碼: 

Java程式碼  收藏程式碼
  1. @Controller  
  2. public class AccessController {  
  3.     /** 
  4.      * 異常頁面控制 
  5.      * 
     
  6.      * @param runtimeException 
  7.      * @return 
  8.      */  
  9.     @ExceptionHandler(RuntimeException.class)  
  10.     public @ResponseBody  
  11.     Map<String,Object> runtimeExceptionHandler(RuntimeException runtimeException) {  
  12.         logger.error(runtimeException.getLocalizedMessage());  
  13.         Map model = new
     TreeMap();  
  14.         model.put("status"false);  
  15.         return model;  
  16.     }  
  17. }  


當這個Controller中任何一個方法發生異常,一定會被這個方法攔截到。然後,輸出日誌。封裝Map並返回,頁面上得到status為false。就這麼簡單。

或者這個有些有些複雜,來個簡單易懂的,上程式碼: 
Java程式碼  收藏程式碼
  1. @Controller  
  2. public class AccessController {  
  3.     /** 
  4.      * 異常頁面控制 
  5.      *  
  6.      * @param runtimeException
     
  7.      * @return 
  8.      */  
  9.     @ExceptionHandler(RuntimeException.class)  
  10.     public String runtimeExceptionHandler(RuntimeException runtimeException,  
  11.             ModelMap modelMap) {  
  12.         logger.error(runtimeException.getLocalizedMessage());  
  13.         modelMap.put("status", IntegralConstant.FAIL_STATUS);  
  14.         return "exception";  
  15.     }  
  16. }