配置异常处理器
2019-07-08 本文已影响0人
xzz4632
1. 异常解析类:
如果在请求映射或请求处理过程中发生了异常, DispatcherServlet
会将其委托给HandlerExceptionResolver
bean链来处理异常.
常见的HandlerExceptionResolver
实现如下:
HandlerExceptionResolver | 说明 |
---|---|
SimpleMappingExceptionResolver |
异常类名称与错误视图页面之间的映射 |
DefaultHandlerExceptionResolver |
spring mvc抛出的异常与HTTP状态码之间的映射的默认定义 |
ResponseStatusExceptionResolver |
根据@ResponseStatus注解的值匹配异常到相应的HTTP状态码 |
ExceptionHandlerExceptionResolver |
通过调用@Controller或@ControllerAdvice类中的@ExceptionHandler注解方法来解析异常. |
2. 配置异常
2.1 异常与HTTP状态码之间映射
使用@ResponseStatus
注解. 注解应用在异常类上.其属性有:
- code: 定义Http状态码
- reason: 异常说明
@ResponseStatus(code = HttpStatus.NOT_FOUND, reason = "user not found")
public class UserNotFoundException extends RuntimeException {
private static final long serialVersionUID = 1L;
}
2.2 @ExceptionHandler注解
定义异常处理方法并加上@ExceptionHandler
注解, 方法可以定义在@Controller
类或@ControllerAdvice
类中:
- 如果定义在
@Controller
类中, 则这个方法可以处理这个类中的所有@RequestMapping
注解方法抛出的对应异常. - 如果定义在
@ControllerAdvice
类中, 则可以处理所有的@Controller
类中的@RequestMapping
注解方法抛出的对应异常.
异常方法的定义同@RequestMapping
方法. 可以通过参数定义处理的异常类型(这只能定义一个类别), 也可以在注解中指定(可以指定多个, 然后定义一个它们的父类型作为参数来接收它们的信息).
@ExceptionHandler({IOException.class, UserNotFoundException.class})
public String handlerException(Exception e) {
System.out.println(e.getMessage());
return "error";
}
2.3 HTTP错误状态码与错误页面之间的映射
在web.xml
中定义<error-page>
元素, 指定状态码和页面路径.
<error-page>
<error-code>500</error-code>
<location>/view/500</location>
</error-page>
<!--对于未定义的状态码将统一跳转到这个页面-->
<error-page>
<location>/error</location>
</error-page>
注1:在<error-page>
元素中还存在一个<exception-type>
子元素, 这是用来定义异常类型(指定异常类型)与错误页面之间的映射.
注2:暂不支持Java配置异常页面映射.