Udemy 課程Microservices with Spring 8
首先要定義我們想回傳的型態為java檔
建一個ExceptionResponsejava
如上,假設希望回傳內容只有這三個:
timestamp & message & details
按下catrl+shift+T鍵查尋ResponseEntityExceptionHandler
這個類別是個abstract class並橫跨所有RequestMapping Method內的@ExceptionHandler
所以接下來只要extend這類別-->ResponseEntityExceptionHandler
就可以客製化我們要的Request的Exception回傳結果
但要如何將其應用到每一個Controller內呢?
在CustomizedResponseEntityExceptionHandler內寫入以下:
如上圖,首先也是要定義他是一個@RestController
因為它是提供Exception Response的Controller
而更重要的是@ControllerAdvice(以ctrl點入觀察)
在這個annotation定義下的功能會沿用到全部的@Controller classes!!!
在ResponseEntityExceptionHandler class找到handleException
複製到CustomizedResponseEntityExceptionHandler內改寫
不過因為會說不能覆寫,所以改名稱為handleAllException並填入:
利用ExceptionResponse填入我們定義的訊息進建構子
最後包含HttpStatus一起代入ResponseEntity建構子回傳
再一次重新執行RestfulWebServicesApplication
並且用GET去找不存在的id500的User資料
Http狀態碼500
response內容:
{
“timestamp”: “2019–06–22T09:36:14.370+0000”,
“message”: “id-500”,
“details”: “uri=/users/500”
}
以上我們仍希望找不到USER回應改為狀態碼404,所以在改寫為
意指,當抓到Exception為UserNotFoundException時,該如何處理
重新執行RestfulWebServicesApplication.java
並以GET打uri:http://localhost:8089/users/500
Http status code是自訂的
回傳的response內容的Json也是自訂的!!