Spring MVC 全局异常处理-RESTAPI接口返回统一JSON格式-自定义异常处理--404异常捕捉

本文详细介绍了如何在Spring MVC中实现全局异常处理,包括RESTAPI接口返回统一JSON格式,自定义异常处理,特别是针对404异常的捕获问题进行了深入分析,探讨了各种处理方式的优缺点,如SimpleMappingExceptionResolver、HandlerExceptionResolver和@ControllerAdvice等,并解析了SpringMVC的异常处理流程和源码。
摘要由CSDN通过智能技术生成

写之前大概两周草草的将一些代码保存在草稿箱,今天有空来看,结果都没有了【怨念】—重新整理一下了 —–【转载请标注出处

  • 第一部分:需求
  • 第二部分:实现方式
  • 第三部分:404异常捕捉不能实现分析
  • 第四部分:原因和源码分析
  • 第五部分:最终总结

需求

  • 本意是想针对对外REST接口的返回格式进行统一,结果404错误始终无法被捕捉

实现方式

对于目前的主流方式全部尝试了一遍,主要有三种,还有其他一些异类采用Filter之类的方式实现,如需可以自取

1. SimpleMappingExceptionResolver
采用xml配置方式,代码零入侵 。自由性不足,获取异常信息少(只有异常信息)。
2. HandlerExceptionResolver
自定义类实现该类。可以实现统一异常处理里。我在实现的时候却没有生效,而是走了其自定义的DefaultHandlerExceptionResolver,具体原因下面分析
3. @ExceptionHandler注解
这种捕捉方式要求和被捕捉Controller在同一个类中,一般实现方式是把ExceptionHandler放在BaseController中继承,自由性差。
4.@ControllerAdvice注解
这种需要配合@ExceptionHandler属于第三种方式变种,我使用的则是这种方式的变种,下面详解。

原因和源码分析

首先来分析异常的处理过程

感谢网上某位同学

上面是简化的请求流转图,感谢某位同学的图片。

下面是程序员赵鑫的原理分析图,我搬来一用。当然我没有授权,如果有争议,我援引互联网信息共享条例自护(黑人问号脸)
感谢程序员赵鑫同学

照例感谢程序员赵鑫同学,想看再详细的分析请转贴这里

上图是SpringMVC的异常处理器结构,HandlerExceptionResolver是一个接口,留给自定义的时候使用。

异常处理器的处理顺序是:异常->HandlerExceptionResolver->自定义异常->默认异常处理器

SpringMVC的异常处理器通过实现Orderd接口,定义Order数值为每个异常处理器排序,图中可以看到默认异常处理器都继承于AbstractHandlerExceptionResolver。看图:

这里写图片描述

默认异常处理器都实现了doResolverException()方法。

图上的每一个处理器其实都代表了可以实现全局自定义处理的一种或者多种方式。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值