1. Spring Web MVC
¶1.3 注解控制器
¶1.3.6 异常
@Controller
和 @ControllerAdvice
类可以创建 @ExceptionHandler
方法处理控制器方法内的异常,如下例:
@Controller
public class SimpleController {
// ...
@ExceptionHandler
public RespinseEntity<String> handle(IOException ex) {
// ...
}
}
异常可以匹配抛出的顶层异常(如,直接抛出 IOException
)或包在顶层异常内的直接原因(如,IOException
包装的 IllegalStateException
)
为了匹配异常类型,建议如上面例子,方法参数就声明要捕获的异常。当匹配到多个异常方法,通常会匹配到根异常对应的方法。具体点说, ExceptionDepthComparator
用来对抛出异常的层次深度进行排序。
另外,注解也可以限制匹配的异常类型,如下例:
@ExceptionHandler({FileSystemException.class, RemoteException.class})
public ResponseEntity<String> handle(IOException ex) {
// ...
}
甚至直接抛出最基础的异常,在注解中限制特定异常类型也可以,如下例:
@ExceptionHandler({FileSystemException.class, RemoteException.class})
public ResponseEntity<String> handle(Exception ex) {
// ...
}
根异常和直接异常的匹配的差异可能会出乎意料。
上面的IOException
变量出现的地方, 函数调用时接收到的是FileSystemException
或RemoteException
类型的参数,因为他们都是IOException
的子类。但是,如果匹配到的异常是IOException
的子类的包装类,
- Post link: http://xiaohaoxing.github.com/2020/12/07/Spring-%E7%BB%9F%E4%B8%80%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86/
- Copyright Notice: All articles in this blog are licensed under unless stating additionally.
若没有本文 Issue,您可以使用 Comment 模版新建。
GitHub Issues