SpringBoot自定義異常和自定義返回格式
阿新 • • 發佈:2018-12-12
在開發專案中,有的時候對於一些特殊的異常,我們需要進行別人的處理,那怎麼自定義我們的異常的?話不多說,直接上乾貨。
首先自定義一個異常類:
public class CustomException extends RuntimeException { //可以用來接受我們方法中傳的引數 private String id; public CustomException(String id) { super("custom not exist"); this.id = id; } public String getId() { return id; } public void setId(String id) { this.id = id; } }
編寫一個測試Controller類
@RestController
public class TestController {
@PostMapping("/test")
public void testCustom(String id) {
throw new CustomException(id);
}
}
當我們在post中呼叫這個方法時,就會跳出報錯資訊,如下圖:
你以為這樣就完成了嘛?重點來了,因為我們就是前後端分離的專案,這個介面是要給app呼叫的,對於app來說需要定義統一的接受格式,不然沒有辦法拿到返回的資料,所以我們需要定義自己的異常返回型別,程式碼如下:
@ControllerAdvice public class ControllerHanderException { @ExceptionHandler(CustomException.class) @ResponseBody @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) //在這個方法裡定義我們需要返回的格式 public Map<String, Object> handleUserNotExistException(CustomException ex){ Map<String, Object> result = new HashMap<>(); result.put("id", ex.getId()); result.put("message", ex.getMessage()); return result; } }
其中: @ControllerAdvice註解表示這個Controller不處理http請求,只處理當其他controller丟擲異常時,進行處理。
@ExceptionHandler: 就是定義處理什麼異常
再此呼叫我們的測試方法,看看會有什麼不同?
按照我們自定義的格式進行返回了!