Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 356|回复: 0

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

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-24 15:47
  • 签到天数: 804 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726782
    发表于 2021-5-17 03:22:12 | 显示全部楼层 |阅读模式

    首先看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()) {
            	// 异常信息日志入库
            }
    	}	
    }

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-3 10:09 , Processed in 0.064717 second(s), 27 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表