【Web开发】Spring MVC 中的异常处理方法
简概
官方文档地址: https:// docs.spring.io/spring-f ramework/docs/current/reference/html/web.html#mvc-ann-exceptionhandler
异常处理⽅法
- 处理⽅法
- @ExceptionHandler
- 添加位置
- @Controller / @RestController
- @ControllerAdvice / @RestControllerAdvice
-
@RestControllerAdvice
或者@ControllerAdvice
类内的解析器的优先级低于@Controller
或@RestController
类的解析器的优先级 - 如果一个异常能被多个解析器所处理,则选择继承关系最近的解析器
异常处理方法-@ExceptionHandler
@Controller和@ControllerAdvice类可以有@ExceptionHandler方法来处理来自控制器方法的异常,如下例所示:
@Controller
public class SimpleController {
// ...
@ExceptionHandler
public ResponseEntity<String> handle(IOException ex) {
// ...
}
异常可以匹配正在传播的顶级异常(例如抛出的直接IOException),也可以匹配包装器异常中的嵌套原因(例如包裹在IllegalStateException中的IOException)。在5.3中,这可以匹配任意的原因级别,而以前只考虑直接原因。
为了匹配异常类型,最好将目标异常声明为方法参数,如上例所示。当多个异常方法匹配时,根异常匹配通常优先于原因异常匹配。更具体地说,ExceptionDepthComparator用于根据抛出异常类型的深度对异常进行排序。
或者,通过注解的声明来缩小异常类型以匹配,如下例所示:
@ExceptionHandler({FileSystemException.class, RemoteException.class})