springmvc全局异常处理
2016-09-01 11:13
369 查看
对于springmvc全局异常处理有三种方式,
1.使用SimpleMappingExceptionResolver实现异常处理
2.实现HandlerExceptionResolver 接口自定义异常处理器
3.使用@ExceptionHandler注解实现异常处理
第一种方式优缺点:
集成简单、有良好的扩展性、对已有代码没有入侵性等优点,但该方法仅能获取到异常信息,若在出现异常时,对需要获取除异常以外的数据的情况不适用。
第二种方式优缺点:
具有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提供更详细的异常处理信息。
第三种方式优缺点:
具有集成简单、不需要附加Spring配置等优点,但该方法对已有代码存在入侵性加上注解,在异常处理时不能获取除异常以外的数据。
我比较喜欢第二种方式,对代码没有侵入性,而且能灵活操作各种异常信息.实现方式见下面的代码.
上面三种方式具体可看:http://cgs1999.iteye.com/blog/1547197
首先在spring配置文件中添加该异常处理的bean:
该bean的实现:
当存在异常时,如果业务代码无法处理,那么就可以抛出让springmvc进行全局处理. 避免将大量异常代码侵入到业务代码中导致无法维护的后果.
1.使用SimpleMappingExceptionResolver实现异常处理
2.实现HandlerExceptionResolver 接口自定义异常处理器
3.使用@ExceptionHandler注解实现异常处理
第一种方式优缺点:
集成简单、有良好的扩展性、对已有代码没有入侵性等优点,但该方法仅能获取到异常信息,若在出现异常时,对需要获取除异常以外的数据的情况不适用。
第二种方式优缺点:
具有集成简单、有良好的扩展性、对已有代码没有入侵性等优点,同时,在异常处理时能获取导致出现异常的对象,有利于提供更详细的异常处理信息。
第三种方式优缺点:
具有集成简单、不需要附加Spring配置等优点,但该方法对已有代码存在入侵性加上注解,在异常处理时不能获取除异常以外的数据。
我比较喜欢第二种方式,对代码没有侵入性,而且能灵活操作各种异常信息.实现方式见下面的代码.
上面三种方式具体可看:http://cgs1999.iteye.com/blog/1547197
首先在spring配置文件中添加该异常处理的bean:
<bean id="exceptionHandler" class="com.xxx.xxx.exception.MyExceptionHandler"/>
该bean的实现:
package com.xxx.xxx.exception; import org.springframework.web.servlet.HandlerExceptionResolver; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.Map; /** * spirngmvc自带的全局异常处理类, * 当业务逻辑抛出异常时都会被该类拦截并进行处理. * * @Author xxx * @Version 1.0 * @see */ public class MyExceptionHandler implements HandlerExceptionResolver { public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { Map<String, Object> model = new HashMap<String, Object>(); model.put("ex", ex); ex.printStackTrace();//打印异常信息 // 根据不同错误转向不同页面 if (ex instanceof CSRFException) {//受到csrf攻击 return new ModelAndView("/errorPage/error", model); } if (ex instanceof BusinessException) {//业务逻辑处理出错 return new ModelAndView("errorPage/businessError", model); } else if (ex instanceof ParameterException) {//参数处理出错。 return new ModelAndView("errorPage/parameterError", model); } else { //其他数据类型错误 return new ModelAndView("errorPage/error", model); } } }
当存在异常时,如果业务代码无法处理,那么就可以抛出让springmvc进行全局处理. 避免将大量异常代码侵入到业务代码中导致无法维护的后果.
相关文章推荐
- springMVC全局异常处理
- SpringMVC全局异常处理
- 框架 day89 涛涛商城项目(补)-activeMQ应用,及springMVC全局异常处理
- SpringMvc 中全局异常处理
- springmvc-学习总结-全局异常处理
- SpringMVC配置全局日期转换器,处理日期转换异常
- springmvc全局异常处理
- SpringMVC实现全局异常捕获处理
- SpringMvc教程(十一)--如何实现全局的异常处理
- Springmvc的全局异常处理
- springMVC --全局异常处理(两种方式)
- SpringMVC全局异常处理实例
- springmvc三种全局异常处理
- springMVC-异常的全局处理 @ControllerAdvice , @ExceptionHandler(Exception.class)
- SpringMVC 全局异常处理
- springmvc异常处理-全局异常处理器开发
- springmvc全局异常处理
- springMVC全局的异常处理
- springmvc全局异常处理
- springMVC --全局异常处理(两种方式)