springboot接口签名统一效验_Spring Boot 优雅地实现接口参数校验

今天继续为大家分享在工作中如何优雅的校验接口的参数的合法性以及如何统一处理接口返回的json格式。每个字都是干货,原创不易,分享不易。

703e5d3207b27b25a6ab81f0b806dc56.png

validation主要是校验用户提交的数据的合法性,比如是否为空,密码是否符合规则,邮箱格式是否正确等等,校验框架比较多,用的比较多的是hibernate-validator, 也支持国际化,也可以自定义校验类型的注解,这里只是简单地演示校验框架在Spring Boot中的简单集成,要想了解更多可以参考 hibernate-validator。

1. pom.xml

<dependency>

2. dto

public 

3. controller

import org.springframework.validation.BindingResult;

99dc403ee66a643dba2134516747623a.png

4. 去掉BindingResult参数

每个接口都需要BindingResult参数,而且每个接口都需要处理错误信息,这样增加一个参数也不优雅,处理错误信息代码量也很重复。如果去掉BindingResult参数,系统就会报错MethodArgumentNotValidException,我们只需要使用全局异常来捕获该错误,处理一下就可以省略传BindingResult参数了。

@RestController

@RestControllerAdvice 用于拦截所有的@RestController

@RestControllerAdvice

124c23dc3a6fe0ee8f396e870137ede1.png

5. 统一返回格式

错误码枚举

@Getter

自定义异常。

@Getter

定义返回格式。

@Getter

全局异常处理器增加对APIException的拦截,并修改异常时返回的数据格式。

@RestControllerAdvice

SimpleController 增加一个抛出异常的方法。

@RestController

c2d2bbafeef511d28f719d7fab4c402f.png

报错返回的格式。

01b4209f69e8616ad0ed998e4f6e85ea.png

不报错,返回的格式。

9bd837fd98e7a4e6eec864d970dd329f.png

6. 去掉接口中的Response包装

@RestControllerAdvice既可以全局拦截异常也可拦截指定包下正常的返回值,可以对返回值进行修改。

@RestControllerAdvice(basePackages = {
@RestController

512dbc1833b497778ba86132185f3c89.png

7. 每个校验错误都对应不同的错误码

@Retention(RetentionPolicy.RUNTIME)
@Data

校验异常获取注解中的错误码。

@ExceptionHandler(MethodArgumentNotValidException.class)

473ac6c600a97bfed98ad2649acc090b.png

62a9a9123951787fc929e560749d39f3.png

8. 个别接口不统一包装响应

有时候第三方接口回调我们的接口,我们的接口必须按照第三方定义的返回格式来,此时第三方不一定和我们自己的返回格式一样,所以要提供一种可以绕过统一包装的方式。

@Retention(RetentionPolicy.RUNTIME)
@RestController

ResponseControllerAdvice 增加一个不包装的条件,配置了@NotResponseWrap注解就跳过包装。

@Override

5a7622dea405bcf70634acab46476344.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值