Springboot参数校验之分组校验、嵌套校验的实现

 更新时间:2023年08月22日 09:48:40   作者:临时工  
日常开发中,免不了需要对请求参数进行校验,诸如判空,长度,正则,集合等,复杂一点的请求参数可能会包含嵌套,分组校验,本文就详细的介绍一下,感兴趣的可以了解一下

日常开发中,免不了需要对请求参数进行校验,诸如判空,长度,正则,集合等,复杂一点的请求参数可能会包含嵌套,分组校验。

我们由简入深开始,一文搞定参数校验!

1. 简单判空

  • GET请求,字符串类型参数:使用@NotBlank注解 @NotBlank String mobile
  • GET请求,int,long byte等类型参数:使用@NotNull注解 @NotNull Integer userNum
  • POST请求,以body中参数为json为例:使用@Valid注解 @Valid UserReq userReq,UserReq中字段使用@NotBlank 或@NotNull

以下均为POST请求,以body中参数类型为json举例

2. 参数长度校验

@Size(min=5,max = 20)
    private String nickName;

长度5-20之间

3. 正则校验

 @Pattern(regexp = "^\\d{15}|\\d{18}$")
    private String idCard;

15或18位数字

4. 集合校验

 @NotEmpty
    private List<User> users;

集合不能为空

5.分组校验

分组校验需要先定义好分组,比如

举例,定义一个AddView类

public interface AddView {
}

针对上面的users集合使用分组

public class UserReq {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @NotNull
    private Long id;
    /**
     * 用户集合
     */
    @NotEmpty(groups = {AddView.class, UpdateView.class})
    private List<User> users;
}

通过配置groups使users在新增和修改的时候才会校验。
在请求方法上设置 @Validated,在修改users时,校验参数不能为空集合

 @PostMapping("users")
    public Response<Void> users(@RequestBody @Validated({UpdateView.class}) UserReq userReq) {
        // to do something
        return RespUtil.success();
    }

6. 嵌套校验

同样的我们用users举例;如果我们想要对users中某个字段也进行校验,那么怎么实现呢?
也很简单,只需要再加一个@Valid

public class UserReq {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @NotNull
    private Long id;
    /**
     * 用户集合
     */
    @NotEmpty(groups = {AddView.class, UpdateView.class})
    @Valid
    private List<User> users;
}

User内字段设置

public class User {
    private static final long serialVersionUID = 1L;
    /**
     * id
     */
    @NotNull
    private Long userId;
    /**
     * 姓名
     */
    @NotBlank
    private String name;
}

这样就实现了参数的嵌套校验+分组校验的组合。

当然,在包javax.validation.constraints下还有很多其他注解来选择支持不同场景的需要,比如@DecimalMax @DecimalMin @Email @Max @Min Negative等,这里仅列举常用的几个起到抛砖引玉的作用。

7. 请求header参数校验

有时候我们不单单需要校验body中参数,还有可能需要校验header中参数,比如常见的token啊、timestamp啊等等。

那就可以利用spring提供的@RequestHeader来实现,用法也很简单

@PostMapping("login")
    public Response<Void> login(@RequestBody @Valid LoginReq loginReq,
                                @NotBlank @RequestHeader("token") String token) {
        // to do something
        return RespUtil.success();

这里我们就实现了对header参数token的判空处理。
后记:参数校验场景各种各样,对于这些简单的使用,掌握好了还是能够覆盖大部分需求的;常用的必须掌握,不常用的我们需要知道,万一哪天遇到了,我们就知道在哪里去查现成的轮子可以使用;当然,对于复杂的参数校验,有可能需要您自定义注解实现,或者通过过滤器等方式实现。不必拘泥于固定形式。一切以结果为导向。

到此这篇关于Springboot参数校验之分组校验、嵌套校验的实现的文章就介绍到这了,更多相关Springboot 参数校验内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot整合FastDFS方法过程详解

    SpringBoot整合FastDFS方法过程详解

    这篇文章主要介绍了SpringBoot整合FastDFS方法过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 模仿百度红包福袋界面实例代码

    模仿百度红包福袋界面实例代码

    新年到新年到,红包抢不停。在我抢红包的时候意外的发现了百度的福袋界面挺不错的,于是抽时间专门写篇文章来完成百度红包界面吧
    2016-02-02
  • SpringBoot项目中Druid自动登录功能实现

    SpringBoot项目中Druid自动登录功能实现

    Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,这篇文章主要介绍了SpringBoot项目中Druid自动登录功能实现,需要的朋友可以参考下
    2024-08-08
  • Mybatis Generator Plugin悲观锁实现示例

    Mybatis Generator Plugin悲观锁实现示例

    本文将从悲观锁为例,让你快速了解如何实现Mybatis Generator Plugin。文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • 你真的知道Java中对象的销毁吗

    你真的知道Java中对象的销毁吗

    java自带垃圾回收机制,会自动识别内存中不再会被使用的对象并将其销毁,释放内存,下面这篇文章主要介绍了Java中对象销毁的相关资料,需要的朋友可以参考下
    2021-10-10
  • JAVA流控及超流控后的延迟处理实例

    JAVA流控及超流控后的延迟处理实例

    这篇文章主要介绍了JAVA流控及超流控后的延迟处理,以实例形式较为详细的分析了Java进行流量控制的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • Java实现修改图片文件名的方法示例

    Java实现修改图片文件名的方法示例

    在很多应用中,用户需要对文件进行重命名操作,包括图片文件,图片文件的重命名操作可以是基于文件内容、日期、用户输入等,本项目的目标是实现一个Java程序,能够修改图片文件的文件名,并进行简单的文件名处理,需要的朋友可以参考下
    2025-02-02
  • Java实现图片模糊效果详解

    Java实现图片模糊效果详解

    图片模糊是图像处理中的一种常见效果,它通过平均周围像素的颜色来使图像变得模糊,下面我们来看看如何使用Swing库实现图片模糊效果吧
    2025-02-02
  • 关于jpa querydsl嵌套查询demo

    关于jpa querydsl嵌套查询demo

    这篇文章主要介绍了关于jpa querydsl 嵌套查询demo,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java实现简单的递归操作方法实例

    Java实现简单的递归操作方法实例

    这篇文章主要给大家介绍了关于Java实现简单的递归操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02

最新评论