- Spring Boot REST API 错误处理 - @Con
- Spring Boot REST API 错误处理
- 重拾后端之Spring Boot(五) -- 跨域、自定义查询及
- 重拾后端之Spring Boot(六) -- 热加载、容器和多项
- 重拾后端之Spring Boot(三):找回熟悉的Control
- 重拾后端之Spring Boot(一):REST API的搭建可
- 重拾后端之Spring Boot(二):MongoDB的无缝集成
- 重拾后端之Spring Boot(四):使用JWT和Spring
- Spring全家桶——SpringBoot Rest API
- Spring Boot REST API 错误处理 - @Exc
本文介绍 Spring Boot 使用 @ControllerAdvice
注解处理 REST API 异常的方法。
目录
-
@ControllerAdvice
简介 - 代码示例
@ControllerAdvice
简介
@ControllerAdvice
是一种特殊的 @Component
,用于标识类。这个类中被 @ExceptionHandler
、@InitBinder
和 @ModelAttribute
注解标识的方法将作用于所有 @Controller
的接口上。
当 @ControllerAdvice
与 @ExceptionHandler
一同使用时可被用来处理全局异常。
注意:还有一个同 @ControllerAdvice
用途相同的类用于直接处理 REST API 异常:@RestControllerAdvice
。
代码示例
- 定义全局异常处理类
package tutorial.spring.boot.mvc.handler;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler({IllegalStateException.class, IllegalArgumentException.class})
@ResponseBody
public String handleIllegalException(Exception e) {
return "GlobalExceptionHandler handleIllegalException worked: " + e;
}
@ExceptionHandler(UnsupportedOperationException.class)
@ResponseBody
public String handleUnsupportedException(Exception e) {
return "GlobalExceptionHandler handleUnsupportedException worked: " + e;
}
}
- 定义两个抛出不同异常的 Controller 类。
ExceptionController1
package tutorial.spring.boot.mvc.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/exception")
public class ExceptionController1 {
@GetMapping("/illegal/state")
public String illegalState() {
throw new IllegalStateException();
}
@GetMapping("/illegal/argument")
public String illegalArgument() {
throw new IllegalArgumentException();
}
}
ExceptionController2
package tutorial.spring.boot.mvc.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/exception")
public class ExceptionController2 {
@GetMapping("/unsupported/operation")
public String unsupportedOperation() {
throw new UnsupportedOperationException();
}
}
- 启动应用验证
3.1 浏览器访问 http://127.0.0.1:8080/exception/unsupported/operation
GlobalExceptionHandler handleUnsupportedException worked: java.lang.UnsupportedOperationException
3.2 浏览器访问 http://127.0.0.1:8080/exception/illegal/state
GlobalExceptionHandler handleIllegalException worked: java.lang.IllegalStateException
3.3 浏览器访问 http://127.0.0.1:8080/exception/illegal/argument
GlobalExceptionHandler handleIllegalException worked: java.lang.IllegalArgumentException
网友评论