Spring Web MVC框架(六) 异常处理
来源:互联网 发布:java中的集合是什么 编辑:程序博客网 时间:2024/06/05 19:59
Spring Web MVC对异常处理有着完善的支持,我们可以捕获控制器中抛出的任何异常,然后按照异常类型将异常信息映射到某个视图文件,向用户显示对应的信息。
@ExceptionHandler
最简单的办法就是使用@ExceptionHandler注解。它可以定义到一个控制器中,处理该控制器抛出的异常。@ExceptionHandler注解接受一个Class,指定捕获哪个异常。如果不指定这个值,则捕获方法参数列表中的所有异常。
@Controllerpublic class ExceptionController { @ExceptionHandler(IOException.class) public String handleException(IOException exception, Model model) { model.addAttribute("message", exception.getMessage()); model.addAttribute("detail", exception); return "exception"; } @RequestMapping("/throw") public String throwException() throws IOException { if (true) throw new IOException("蛋疼,遇到了一个IO错误"); return "exception"; }}
该注解标注的方法也可以用于控制器通知(ControllerAdvice),应用到多个控制器上。
异常解析器
另外一种异常处理办法就是使用异常解析器。我们可以使用 SimpleMappingExceptionResolver
将异常类型和异常视图关联起来。也可以自己实现一个HandlerExceptionResolver
用于处理异常。使用方法可以参考这篇博客Spring MVC 系统异常处理方式及性能对比。
Spring默认情况下也会注册一个异常解析器DefaultHandlerExceptionResolver
,将Spring异常映射到4XX和5XX错误,详情参见Spring参考文档 22.11.3. Handling Standard Spring MVC Exceptions
使用@ResponseStatus注解业务异常
我们的业务代码的异常可以使用@ResponseStatus注解。当这样的异常抛出时,ResponseStatusExceptionResolver
会捕获这些异常并设置相应的错误代码。Spring默认会注册一个ResponseStatusExceptionResolver
,我们不需要手动设置即可使用。
@ResponseStatus(HttpStatus.NOT_FOUND)
public class MyCustomException extends RuntimeException {
public MyCustomException() {
super();
}
public MyCustomException(String msg) { super(msg);}
}
自定义Servlet容器错误页面
我们可以直接在web.xml
中定义Servlet容器的错误页面。如果使用Servlet 3.0容器的话,如果不指定错误类型,那么该页面会作为默认错误页面来应用。在Spring Web MVC中,该页面不仅可以是一个HTML或JSP页面,也可以是控制器中某个处理方法接受的URL。
<error-page> <location>/error</location></error-page>
- Spring Web MVC框架(六) 异常处理
- Spring 4 官方文档学习(①)Web MVC 框架之异常处理
- spring mvc web应用异常处理
- Spring Web MVC框架(三) 异步处理
- Spring MVC异常处理
- spring mvc处理异常
- spring mvc 异常处理
- Spring MVC异常处理
- spring mvc 异常处理
- spring mvc异常处理
- spring mvc 异常 处理
- Spring MVC异常处理
- Spring MVC 异常处理
- spring mvc 异常处理
- Spring MVC 异常处理
- Spring MVC处理异常
- spring mvc异常处理
- Spring MVC 异常处理
- 单向链表例题
- Hql数据查询基础
- 数据库SQL语言语法总结2---索引
- CSS实现的几款不错的菜单栏
- Oracle索引
- Spring Web MVC框架(六) 异常处理
- Java 基本程序设计
- Bootstrap学习笔记(八) Bootstrap支持的JavaScript插件
- 这是第一篇博客
- 一些关于性能优化的总结
- 谷歌小程序(Android Instant Apps)和微信小程序,你更看好哪个?
- C程序设计学习笔记(完结)
- java使用webmagic实现网络爬虫功能(二)
- 工作沉浸的研究现状及展望,2016下载