1. 引言
Happy-path REST 已經相當成熟,Spring 使得在 Java 中輕鬆實現它。
但如果事情出錯呢?
在本教程中,我們將介紹 使用 Spring 將 Java 異常作為 JSON 響應的一部分。
要了解更全面的信息,請查看我們關於使用 Spring 進行 REST 錯誤處理以及創建 Java 全局異常處理器的文章。
2. 一種標註解決方案
我們將使用三個基本的 Spring MVC 註解來解決這個問題:
- @RestControllerAdvice,包含 @ControllerAdvice 以將周圍類註冊為每個 @Controller 應該瞭解的事實,以及 @ResponseBody 以告訴 Spring 將該方法的響應作為 JSON 渲染
- @ExceptionHandler 以告訴 Spring 應該調用哪些方法的異常
這些註解一起創建一個 Spring Bean,該 Bean 處理我們配置的任何異常。 更多關於使用 @ControllerAdvice 和 @ExceptionHandler 的信息。
3. 示例
首先,讓我們創建一個自定義異常,以便返回給客户端:
public class CustomException extends RuntimeException {
// constructors
}第二,我們定義一個類來處理異常並將其作為 JSON 傳遞給客户端:
@RestControllerAdvice
public class ErrorHandler {
@ExceptionHandler(CustomException.class)
@ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
public CustomException handleCustomException(CustomException ce) {
return ce;
}
}請注意,我們添加了 @ResponseStatus 註解。這將指定要發送給客户端的狀態碼,在本例中為內部服務器錯誤。此外,@ResponseBody 將確保對象以 JSON 格式返回給客户端。最後,以下是一個示例控制器,展示瞭如何拋出異常:
@Controller
public class MainController {
@GetMapping("/")
public void index() throws CustomException {
throw new CustomException();
}
}4. 結論
在本篇文章中,我們展示瞭如何在 Spring 中處理異常。此外,我們還展示瞭如何將這些異常序列化為 JSON 並返回給客户端。