zoukankan      html  css  js  c++  java
  • springMVC --全局异常处理(两种方式)

    首先看springMVC的配置文件:

    <!-- 全局异常配置 start -->     
         <bean id="exceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">     
             <property name="exceptionMappings">     
                 <props>     
                     <prop key="java.lang.Exception">errors/error</prop>     
                     <prop key="java.lang.Throwable">errors/err</prop>     
                 </props>     
             </property>     
             <property name="statusCodes">     
                 <props>     
                     <prop key="errors/error">500</prop>     
                     <prop key="errors/404">404</prop>     
                 </props>     
             </property>     
             <!-- 设置日志输出级别,不定义则默认不输出警告等错误日志信息 -->     
             <property name="warnLogCategory" value="WARN"></property>     
             <!-- 默认错误页面,当找不到上面mappings中指定的异常相应视图时,使用本默认配置 -->     
             <property name="defaultErrorView" value="errors/error"></property>     
             <!-- 默认HTTP状态码 -->     
             <property name="defaultStatusCode" value="500"></property>     
         </bean>     
         <!-- 全局异常配置 end -->

    这里基本的类是SimpleMappingExceptionResolver类。和他的父类AbstractHandlerExceptionResolver类。

    能够看到源代码中和上述配置相应的属性;



    另外要注意的是日志

    <span style="font-size:14px;"><property name="warnLogCategory" value="WARN"></property></span>

    级别设置为WARN:



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

    public class SpringMVCSimpleMappingExceptionResolver extends SimpleMappingExceptionResolver {
    	
    	public static final Log log = LogFactory.getLog(SpringMVCSimpleMappingExceptionResolver.class);
    	
    	@Override
    	protected ModelAndView doResolveException(HttpServletRequest request,
    			HttpServletResponse response, Object handler, Exception ex) {
    		ModelAndView mv = null;
    		String accept = request.getHeader("accept");
            if (accept != null && !(accept.indexOf("application/json") > -1 
            		|| (request.getHeader("X-Requested-With") != null 
            		&& request.getHeader("X-Requested-With").indexOf("XMLHttpRequest") > -1))) {
                mv = super.doResolveException(request, response, handler, ex);
            } else {
                try { 
                	// json 请求返回
                    PrintWriter writer = response.getWriter();  
                    writer.write(Return.failure((ex.getMessage())));
                    writer.flush();
                } catch (IOException e) {
                	if (log.isInfoEnabled()) {
                		log.info(StringUtil.getTrace(e));
                	}
                }
            }
            doLog((HandlerMethod) handler, ex);
            return mv;
    	}
    	
    	/**
    	 * 记录异常日志
    	 * 
    	 * @param handler
    	 * @param excetpion
    	 */
    	private void doLog(HandlerMethod handler, Exception excetpion) {
            if (log.isEnabledExceptionDb()) {
            	// 异常信息日志入库
            }
    	}	
    }

  • 相关阅读:
    Let the Balloon Rise
    Andy's First Dictionary
    myschool 1204
    vector容器
    766A Mahmoud and Longest Uncommon Subsequence
    python全栈开发-logging模块(日记专用)
    python全栈开发- day14列表推导式、生成器表达式、模块基础
    python全栈开发-Day13 内置函数
    python全栈开发-Day12 三元表达式、函数递归、匿名函数
    python全栈开发-Day11 迭代器、生成器、面向过程编程
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7049690.html
Copyright © 2011-2022 走看看