天天看點

@ControllerAdvice + @ExceptionHandler 不起作用,springboot異常處理的一些坑

在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預設傳回格式。

解決方案:

@ControllerAdvice + @ExceptionHandler 不起作用,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
  •  祁東握力

謝謝

繼續閱讀