Udemy 課程Microservices with Spring 8

自製User not Found Exception處理#2

ZONGRU Li
4 min readJun 22, 2019

首先要定義我們想回傳的型態為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也是自訂的!!

--

--

ZONGRU Li
ZONGRU Li

Written by ZONGRU Li

2022/11/17 開源部分個人筆記給LINE "Java程式語言討論區"社群,希望能對社群的技術學習做一點點貢獻.(掩面....記得退訂閱!

No responses yet