Spring-MVC开发之全局异常捕获全面解读
来源:互联网 发布:唱歌录音软件 编辑:程序博客网 时间:2024/06/11 02:19
异常,我们一定要捕获一切该死的异常,宁可错杀一千也不能放过一个!产品上线后的异常更要命,一定要屏蔽错误内容,以免暴露敏感信息!
在用Spring MVC开发WEB应用时捕获全局异常的方法基本有两种:
1、WEB.XML,就是指定error-code和page到指定地址,这也是最传统和常见的做法。
2、用SpringMVC的全局异常捕获功能,这种相对可操作性更强一些,可根据自己的需要做一后善后处理,比如日志记录等。
本文列出Spring-MVC做WEB开发时常用全局异常捕获的几种解决方案抛砖引玉,没有相互依赖,每个都可单独使用!
1、定义服务器错误WEB.XML整合Spring MVC
web.xml
<error-page> <error-code>404</error-code> <location>/404</location></error-page><error-page> <error-code>500</error-code> <location>/500</location></error-page><!-- 未捕获的错误,同样可指定其它异常类,或自定义异常类 --><error-page> <exception-type>java.lang.Exception</exception-type> <location>/uncaughtException</location></error-page>
applicationContext.xml
<!-- 错误路径和错误页面,注意指定viewResolver --><mvc:view-controller path="/404" view-name="404"/><mvc:view-controller path="/500" view-name="500"/><mvc:view-controller path="/uncaughtException" view-name="uncaughtException"/>
2、(方式一)Spring全局异常,代码入侵方式
2.1 异常抛出
@Controllerpublic class MainController { @ResponseBody @RequestMapping("/") public String main(){ throw new NullPointerException("NullPointerException Test!"); }}
2.2 异常捕获
//注意使用注解@ControllerAdvice作用域是全局Controller范围//可应用到所有@RequestMapping类上或@ExceptionHandler、@InitBinder、@ModelAttribute的方法上,在这里是@ExceptionHandler@ControllerAdvicepublic class AControllerAdvice { @ExceptionHandler(NullPointerException.class) @ResponseStatus(HttpStatus.BAD_REQUEST) @ResponseBody public String handleIOException(NullPointerException ex) { return ClassUtils.getShortName(ex.getClass()) + ex.getMessage(); }}
3、(方式二)Spirng全局异常,配置方式
3.1 异常抛出
@Controllerpublic class MainController { @ResponseBody @RequestMapping("/") public String main(){ throw new NullPointerException("NullPointerException Test!"); }}
3.2 异常捕获
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <!-- 默认错误页面,就是不在exceptionMappings指定范围内 --> <property name="defaultErrorView" value="uncaughtException" /> <property name="exceptionMappings"> <props> <!-- 异常类名,可以是全路径,错误页面或Controller路径! --> <prop key=".NullPointerException">NullPointerException</prop> <prop key="java.io.IOException">IOException</prop> </props> </property></bean>
4、 (方式三)Sping全局异常,自定义异常类和异常解析
4.1 自定义异常类:
public class CustomException extends RuntimeException { public CustomException(){ super(); } public CustomException(String msg, Throwable cause){ super(msg, cause); //Do something... }}
4.2 抛出异常
@ResponseBody@RequestMapping("/ce")public String ce(CustomException e){ throw new CustomException("msg",e);}
4.3 实现异常捕获接口HandlerExceptionResolver
public class CustomHandlerExceptionResolver implements HandlerExceptionResolver{ @Override public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { Map<String, Object> model = new HashMap<String, Object>(); model.put("e", e); //这里可根据不同异常引起类做不同处理方式,本例做不同返回页面。 String viewName = ClassUtils.getShortName(e.getClass()); return new ModelAndView(viewName, model); }}
4.4 配置Spring支持异常捕获
<bean class="cn.bg.controller.CustomHandlerExceptionResolver"/>
完!
0 0
- Spring-MVC开发之全局异常捕获全面解读
- Spring-MVC开发之全局异常捕获全面解读(转载)
- Spring-MVC开发之全局异常捕获全面解读
- Spring-MVC开发之全局异常捕获全面解读
- Spring-MVC开发之全局异常捕获全面解读
- Spring-MVC开发值全局异常捕获全面解读
- Spring-MVC开发之全局异常捕获
- Spring Mvc全局异常捕获
- spring mvc 全局异常捕获
- Android开发之全局异常捕获
- Spring MVC使用之统一异常捕获
- spring boot 全局异常捕获
- springboot之全局异常捕获
- Android开发之全局异常捕获完美闪退
- spring MVC异常捕获机制
- Spring mvc 全局异常处理
- Spring MVC全局异常处理
- spring mvc 全局异常处理
- Python 标准库 urllib2 的使用细节
- 真机测试中设备的UDID加满了如何给新设备打包(iPhone上限100台,以xcode7.3为例)
- C/C++编程语言书籍
- centos\linux 下十分钟内 用vim 搭建c++ IDE,以centos 7.0为例
- Easy Problem V
- Spring-MVC开发之全局异常捕获全面解读
- 关于使用adb 打logcat
- UITableView 相关内容
- 微信支付代理支付宝支付代理移动扫码支付代理注意项
- 对于Packet for query is too large(mysql写入数据过大) 问题的处理
- SQL多表联合查询
- 关于Http请求后返回json乱码的问题
- 十六进制怎么转换成十进制
- [AS2.1.3]RecyclerView的使用总结