SprinBoot 全局异常处理+自定义注解+参数校验

0. 背景

  • 接口的请求参数校验会进行各种判断,写起来很繁琐,各种判空判断长度以及正则判断等等,逻辑简单,却又不得不做

  • 接口自定义异常抛出后需要一个异常处理器去处理,而不是直接将异常返回给前端

  • 不是所有的接口方法都需要进行参数校验的,所以可以使用自定义注解,只处理有注解标注的方法

1. 环境

  • SpringBoot 2.2.5.RELEASE

  • JDK 1.8.0_271

2. 编码

2.1 接口

2.2 自定义注解

SprinBoot 全局异常处理+自定义注解+参数校验_第1张图片

2.3 参数校验异常处理器

2.4 全局异常处理器

2.5 自定义异常ApiException

SprinBoot 全局异常处理+自定义注解+参数校验_第2张图片

3. 说明

3.1 自定义注解

  • 注解到需要参数校验的方法上,就可以被参数校验异常处理器扫描到并进行相应处理.
  • 需要注意的是,被注解的方法,需要参数使用@Valid注解进行参数校验,同时不要使用BindingResult接收校验结果,使方法抛出指定异常才可以被捕获处理.

3.2 自定义接口异常

  • 进行一些业务处理或者参数特定的校验的时候,如果失败,可以抛出该异常.

  • 异常会被全局异常处理器捕获,并将异常码,异常信息封装成统一的对象返回给接口调用者.

3.3 参数校验异常处理器

  • 扫描特定注解的方法,这里是RestController下的ParamValidate注解的方法.
  • 捕获校验抛出的特定异常MethodArgumentNotValidException,可能存在多条校验不通过的信息,这里只返回第一个即可.

3.4 全局异常处理器

  • apiExceptionHandler处理接口自定义异常,包装为统一返回对象返回即可.

  • parameterMissingExceptionHandler处理参数丢失情况,比如本文中的接口,需要一个userId,如果这个参数没有传,就会抛出这个异常,会被全局异常处理捕获到并进行更友好的返回.

  • parameterBodyMissingExceptionHandler处理请求体丢失的情况,比如本文中的接口,如果发起POST请求的时候,请求体是空的,就会抛出这个异常,会被全局异常处理捕获并进行更友好的返回.

3.5 响应示例

3.5.1 参数校验失败

SprinBoot 全局异常处理+自定义注解+参数校验_第3张图片

3.5.2 参数不全错误

SprinBoot 全局异常处理+自定义注解+参数校验_第4张图片

3.5.3 请求体为空错误

SprinBoot 全局异常处理+自定义注解+参数校验_第5张图片


参考链接

springboot+aop+自定义注解,打造通用的全局异常处理和参数校验切面(通用版)

SpringBoot参数校验 + 全局异常处理 + 数据统一响应_车马很慢路很远的博客

你可能感兴趣的:(JAVA,java,spring,boot,全局异常处理,自定义注解,参数校验)