springMVC --全局异常处理(两种方式)

来源:互联网 发布:梦幻西游淘宝租号 编辑:程序博客网 时间:2024/06/14 22:03

首先看springMVC的配置文件:

[html] view plain copy
  1. <!-- 全局异常配置 start -->       
  2.      <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">       
  3.          <property name="exceptionMappings">       
  4.              <props>       
  5.                  <prop key="java.lang.Exception">errors/error</prop>       
  6.                  <prop key="java.lang.Throwable">errors/err</prop>       
  7.              </props>       
  8.          </property>       
  9.          <property name="statusCodes">       
  10.              <props>       
  11.                  <prop key="errors/error">500</prop>       
  12.                  <prop key="errors/404">404</prop>       
  13.              </props>       
  14.          </property>       
  15.          <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->       
  16.          <property name="warnLogCategory" value="WARN"></property>       
  17.          <!-- 默认错误页面,当找不到上面mappings中指定的异常对应视图时,使用本默认配置 -->       
  18.          <property name="defaultErrorView" value="errors/error"></property>       
  19.          <!-- 默认HTTP状态码 -->       
  20.          <property name="defaultStatusCode" value="500"></property>       
  21.      </bean>       
  22.      <!-- 全局异常配置 end -->  

这里主要的类是SimpleMappingExceptionResolver类,和他的父类AbstractHandlerExceptionResolver类。

可以看到源码中和上述配置对应的属性;



另外要注意的是日志

[html] view plain copy
  1. <span style="font-size:14px;"><property name="warnLogCategory" value="WARN"></property></span>  

级别设置为WARN:



也可以实现HandlerExceptionResolver接口或者继承SimpleMappingExceptionResolver,写一个自己的异常处理程序

[java] view plain copy
  1. public class SpringMVCSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver {  
  2.       
  3.     public static final Log log = LogFactory.getLog(SpringMVCSimpleMappingExceptionResolver.class);  
  4.       
  5.     @Override  
  6.     protected ModelAndView doResolveException(HttpServletRequest request,  
  7.             HttpServletResponse response, Object handler, Exception ex) {  
  8.         ModelAndView mv = null;  
  9.         String accept = request.getHeader("accept");  
  10.         if (accept != null && !(accept.indexOf("application/json") > -1   
  11.                 || (request.getHeader("X-Requested-With") != null   
  12.                 && request.getHeader("X-Requested-With").indexOf("XMLHttpRequest") > -1))) {  
  13.             mv = super.doResolveException(request, response, handler, ex);  
  14.         } else {  
  15.             try {   
  16.                 // json 请求返回  
  17.                 PrintWriter writer = response.getWriter();    
  18.                 writer.write(Return.failure((ex.getMessage())));  
  19.                 writer.flush();  
  20.             } catch (IOException e) {  
  21.                 if (log.isInfoEnabled()) {  
  22.                     log.info(StringUtil.getTrace(e));  
  23.                 }  
  24.             }  
  25.         }  
  26.         doLog((HandlerMethod) handler, ex);  
  27.         return mv;  
  28.     }  
  29.       
  30.     /** 
  31.      * 记录异常日志 
  32.      *  
  33.      * @param handler 
  34.      * @param excetpion 
  35.      */  
  36.     private void doLog(HandlerMethod handler, Exception excetpion) {  
  37.         if (log.isEnabledExceptionDb()) {  
  38.             // 异常信息日志入库  
  39.         }  
  40.     }     
  41. }  

转载出处:http://blog.csdn.net/u014034854/article/details/47178729
原创粉丝点击