1. 程式人生 > >SpringBoot自定義異常和自定義返回格式

SpringBoot自定義異常和自定義返回格式

在開發專案中,有的時候對於一些特殊的異常,我們需要進行別人的處理,那怎麼自定義我們的異常的?話不多說,直接上乾貨。

首先自定義一個異常類:

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: 就是定義處理什麼異常

再此呼叫我們的測試方法,看看會有什麼不同?

按照我們自定義的格式進行返回了!