springmvc三种全局异常处理
2016-08-25 10:45
369 查看
其实自己一直有想把自己的项目弄的越简洁越好,不用把项目中每个方法看起来比较臃肿,所以自己没事就去论坛,博客看别人怎么整合
今天特意写一些自己上个项目中用到的异常全局拦截处理
springmvc有三种方式
1.使用springmvc提供简单异常处理器simpleMappingException
2.实现spring的异常处理接口handleerExceptionResolver自定义处理异常
3.使用 @ExceptionHandler注解实现遗产处理
springMVC-servlet.xml
[html] view
plain copy
<beanclassbeanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
定义默认的异常处理页面,当该异常类型的注册时使用
<property name="defaultErrorView" value="error">
</property>
定义异常处理页面用来获取异常信息的变量名,默认名为exception
<propertynamepropertyname="exceptionAttribute"value="ex"></property>
定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值
<property name="exceptionMappings">
<props>
<propkeypropkey="etc.exception.MyException">error-my</prop>
这里还可以继续扩展对不同异常类型的处理
</props>
</property>
</bean>
[java] view
plain copy
public class MyExceptionHandler{
@ExceptionHandler
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
Map<String, Exception> map = new HashMap<String, Exception>();
map.put("ex",ex);
// 根据获取的Exception参数进行view跳转
if (ex instanceof MyException) {
return new ModelAndView("error-my",map);
} else {
return new ModelAndView("error",map);
}
}
}
定义了这样一个异常处理器之后就要在springMVC-servlet.xml中定义这样一个bean对象,如
[html] view
plain copy
<bean id="myExceptionHandler" class="com.tiantian.xxx.web.handler.myExceptionHandler"/>
如:
[java] view
plain copy
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import com.tiantian.blog.web.servlet.MyException;
这里在页面上访问test方法的时候就会报错,而拥有该test方法的Controller又拥有一个处理该异常的方法,这个时候处理异常的方法就会被调用
当发生异常的时候,上述两种方式都使用了的时候,第一种方式会将第二种方式覆盖
这个项目中我使用了第三种,并且在每个controller中继承这个GlobalController ,实现整个项目的全局异常拦截
今天特意写一些自己上个项目中用到的异常全局拦截处理
springmvc有三种方式
1.使用springmvc提供简单异常处理器simpleMappingException
2.实现spring的异常处理接口handleerExceptionResolver自定义处理异常
3.使用 @ExceptionHandler注解实现遗产处理
SimpleMappingExceptionResolver:
springMVC-servlet.xml[html] view
plain copy
<beanclassbeanclass="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
定义默认的异常处理页面,当该异常类型的注册时使用
<property name="defaultErrorView" value="error">
</property>
定义异常处理页面用来获取异常信息的变量名,默认名为exception
<propertynamepropertyname="exceptionAttribute"value="ex"></property>
定义需要特殊处理的异常,用类名或完全路径名作为key,异常也页名作为值
<property name="exceptionMappings">
<props>
<propkeypropkey="etc.exception.MyException">error-my</prop>
这里还可以继续扩展对不同异常类型的处理
</props>
</property>
</bean>
HandlerExceptionResolver :
[java] viewplain copy
public class MyExceptionHandler{
@ExceptionHandler
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response, Object handler, Exception ex) {
Map<String, Exception> map = new HashMap<String, Exception>();
map.put("ex",ex);
// 根据获取的Exception参数进行view跳转
if (ex instanceof MyException) {
return new ModelAndView("error-my",map);
} else {
return new ModelAndView("error",map);
}
}
}
定义了这样一个异常处理器之后就要在springMVC-servlet.xml中定义这样一个bean对象,如
[html] view
plain copy
<bean id="myExceptionHandler" class="com.tiantian.xxx.web.handler.myExceptionHandler"/>
使用@ExceptionHandler进行处理:
使用@ExceptionHandler进行处理有一个不好的地方是进行异常处理的方法必须与出错的方法在同一个Controller里面如:
[java] view
plain copy
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RequestMapping;
import com.tiantian.blog.web.servlet.MyException;
@ExceptionHandler @ResponseBody public String exp(HttpServletRequest request, Exception ex) { request.setAttribute("ex", ex); // 根据不同错误转向不同页面 if(ex instanceof NullPointerException) { return CtrUtils.toWxResultFormat(12133, "NullPointerException异常:" + ex.getMessage()); }else if(ex instanceof IllegalArgumentException ) { logger.error("ParameterException exception异常"); return CtrUtils.toWxResultFormat(12134, "ParameterException exception异常"); }else if (ex instanceof org.springframework.web.multipart.MaxUploadSizeExceededException){ return CtrUtils.toWxResultFormat(10113, "图片大小不能超过5M"); }else { return CtrUtils.toWxResultFormat(12135,ex.getMessage()); } }
这里在页面上访问test方法的时候就会报错,而拥有该test方法的Controller又拥有一个处理该异常的方法,这个时候处理异常的方法就会被调用
当发生异常的时候,上述两种方式都使用了的时候,第一种方式会将第二种方式覆盖
这个项目中我使用了第三种,并且在每个controller中继承这个GlobalController ,实现整个项目的全局异常拦截
相关文章推荐
- springMVC全局异常处理
- SpringMVC全局异常处理
- springMVC学习(9)-全局异常处理
- Spring全局异常处理的三种方式
- SpringMVC实现全局异常捕获处理
- SpringMVC配置全局日期转换器,处理日期转换异常
- springmvc全局异常处理
- 框架 day89 涛涛商城项目(补)-activeMQ应用,及springMVC全局异常处理
- SpringMVC配置全局日期转换器,处理日期转换异常
- springMVC --全局异常处理(两种方式)
- springMVC --全局异常处理(两种方式)
- SpringMVC配置全局日期转换器,处理日期转换异常
- SpringMvc教程(十一)--如何实现全局的异常处理
- springMVC三种异常处理方式
- Springmvc中异常处理的三种方式
- springMVC-异常的全局处理 @ControllerAdvice , @ExceptionHandler(Exception.class)
- springmvc全局异常处理
- springMVC全局的异常处理
- Spring全局异常处理的三种方式
- 详解Spring全局异常处理的三种方式