在sringboot中使用@ControllerAdvice處理異常十分輕松,但是在使用的過程中踩到了個坑,浪費了一些時間。也是怪自己沒有好好解讀springboot的文檔!
下面是我的@ControllerAdvice聲明的全局異常處理類的代碼:
@ControllerAdvice(basePackages = {"com.dmcn.oa"})
@ResponseBody // 這樣的話可以直接說用@RestControllerAdvice的
public class OAExceptionHandler {
@ExceptionHandler({DuplicateKeyException.class})
public ResponseData handleDuplicateKeyException(DuplicateKeyException e){
logger.error(e.getMessage(), e);
return ResponseData.error("資料庫已經有這個記錄,不需要再次存入",407);
}
}
正常情況下當我com.dmcn.oa包下某個Controller出現異常,将會被捕捉到進行異常處理,傳回我們指定的資料格式。但是這樣配置傳回的依然是springboot預設傳回格式。
解決方案:

使用@ExceptionHandler注解傳回值最好是Map,重要的是傳回結果中鍵的值不能為null。
原來我自定義的傳回結構中存在null,就像這樣,就不會正常傳回奇怪得很:
public static Map newResult(String msg, int code, Object data){
Map map = new HashMap();
map.put("code",code);
map.put("msg",msg);
map.put("data",null);
return map;
}
————————————————————————————————————————————————————————
這是我發現的坑,當然還有其他人的,這裡我就把别人發現問題引過來吧,友善以後查找
- 徐三爺
- XuePeng77
- 祁東握力
謝謝