文章目录

  • 一、常用注解@NotEmpty,@NotBlank,@NotNull介绍
  • 二、@Valid与@Validated的使用与区别
    • 2.1@Valid与@Validated区别:
    • 2.2嵌套验证
  • 三、总结

一、常用注解@NotEmpty,@NotBlank,@NotNull介绍

包位置:javax.validation.constraints.xxx

@NotEmpty 用在集合上面,一般用来校验List类型(不能注释枚举),而且长度必须大于0

@NotBlank 用在String上面,一般用来校验String类型不能为空,而且调用trim()后,长度必须大于0。

@NotNull 用在所有类型上面,一般用来校验Integer类型不能为空,但可以为empty。

需要搭配@Valid使用,在检验Controller的入参是否符合规范时

使用方法如下:

public class RegisterVo {@NotBlank(message = "昵称不能为空")private String nickname;@NotBlank(message = "手机号不能为空")private String mobile;@NotBlank(message = "密码不能为空")private String password;
}
 public JSONResult register(@Validated @RequestBody RegisterVo registerVo){}

此包下的其他注解:(赶紧收藏!需要用到的时候打开查看直接用!!)

注解 含义
@Null 元素必须为null
@NotNull 元素不能null
@AssertTrue 元素必须为true
@AssertFalse 元素必须是false
@Min(value) 元素必须是一个数字,其值必须大于等于指定的最小值
@Max(value) 元素必须是一个数字,其值必须小于等于指定的最大值
@DecimalMin(value) 元素必须是一个数字,其值必须大于等于指定的最小值
@DecimalMax(value) 元素必须是一个数字,其值必须小于等于指定的最大值
@Size(max,min) 元素的大小必须在指定的范围内
@Digits(integer,fraction) 元素必须是一个数字,其值必须在可接受的范围内
@Past 元素必须是一个过去的日期
@Future 元素必须是一个将来的日期
@Pattern(value) 元素必须符合指定的正则表达式
@Email 元素必须是电子邮箱地址
@Length 字符串的大小必须在指定的范围内
@NotEmpty 字符串必须非空
@Range 元素必须在合理的范围内

当然知道了上面注解的用法后,还需要知道@Valid与@Validated的使用与区别

二、@Valid与@Validated的使用与区别

@Valid、@Validated 注解可以实现数据的验证,你可以定义实体,在实体的属性上添加校验规则
校验规则如上@NotEmpty,@NotBlank,@NotNull等等的注解就是,不加上就不会生效!
@Valid 包位置:javax.validation
@Validated 包位置 org.springframework.validation.annotation
是@Valid 的一次封装,是Spring提供的校验机制使用。

2.1@Valid与@Validated区别:

相同点: 在检验Controller的入参是否符合规范时,使用@Validated或者@Valid都可以实现,并且需要传入BindingResult对象,用于获取校验失败情况下的反馈信息,如下代码:

    @PostMapping("register")//@Valid这两个用哪个效果都一样public JSONResult register(@Validated @RequestBody RegisterVo registerVo, BindingResult bindingResult){//会把校验失败情况下的反馈信息if (bindingResult.hasErrors()) {System.out.println(bindingResult.getFieldError().getDefaultMessage());return JSONResult.error().message(bindingResult.getFieldError().getDefaultMessage());}memberService.register(registerVo);return JSONResult.ok();}

不同点:2个方面如下

1、分组上:

@Valid 不支持分组, @Validated则支持分组验证。

2、使用位置:

@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上

2.2嵌套验证

如果我们需要用到嵌套验证,(什么是嵌套验证)看代码上的注释哦
代码如下:

为了能够进行嵌套验证,必须手动在Person实体的son字段上明确指出这个字段里面的实体也要进行验证。

class Person {@NotNullprivate Integer id;@NotNull/*** @Validated不允许使用在成员属性上,所以只能用@Valid* 如果不加  @Valid 就不会对 Son类进行校验,只会判断 @NotNull,List<Son>是否为空,并不会Son类里面的成员属性*/@Valid //嵌套验证private List<Son> son;
}class Son {@NotNullprivate Integer sid;@NotBlank(message = "姓名不能为空")private String name;}class MemberController {@ApiOperation(value = "会员注册")@PostMapping("register")//使用@Validated或者@Valid都可以,这样就完成了嵌套验证public JSONResult register(@Validated @RequestBody Person person, BindingResult bindingResult){if (bindingResult.hasErrors()) {System.out.println(bindingResult.getFieldError().getDefaultMessage());return JSONResult.error().message(bindingResult.getFieldError().getDefaultMessage());}return JSONResult.ok();}}

三、总结

1、常用校验注解@NotEmpty,@NotBlank,@NotNull,需要搭配@Valid或@Validated使用
2、@Valid或@Validated 中有 BindingResult可以获取校验失败情况下的反馈信息,如果不添加,默认情况下会抛出对应的异常。
3、@Validated无法单独提供嵌套验证功能。不能用在成员属性上,能配合嵌套验证注解@Valid进行嵌套验证。
@Valid无法单独提供嵌套验证功能。能够用在成员属性上,能配合嵌套验证注解@Valid进行嵌套验证。

有问题大家一起提出,我们共同学习,共同成长!!
欢迎评论区留言

常用校验注解@NotEmpty,@NotBlank,@NotNull,@Valid,@Validated用法区别,以及搭配 BindingResult使用,嵌套验证等《使用|CSDN创作打卡》相关推荐

  1. Java校验注解@NotEmpty,@NotBlank,@NotNull的使用方法和区别

    以上三个注解均是javax.validation.constraints包下的,用于属性上的: @NotEmpty.@NotBlank.@NotNull三个注解的区别: @NotEmpty: 用在集合 ...

  2. [JAVA EE] Thymeleaf 高级用法:模板布局,带参数的引用片段,表单验证,常用校验注解

    模板布局 公共部分通常定义为模板布局:如页眉,页脚,公共导航栏.菜单等. 模板布局定义方法 布局页中用 th:fragment 定义模板片段,其他页面用 th:insert 引用片段 例如:foote ...

  3. @NotNull :@NotEmpty @NotBlank :@NonNull:@Nullable 的区别

    @NotNull : 用在基本类 型上 不能为null 但可以为空字符串 @NotEmpty : 用在集合类上 不能为空 并且长度必须大于0 @NotBlank : 只能作用在String上,不能为n ...

  4. 《简述一下SVM支持向量机的常用的核函数以及其产生的意义|CSDN创作打卡》

    在我发的前一篇博客中,我利用支持向量机实现了一个简单的二分类问题,具体的程序可以查阅我之前发的一个博客,但是如果只用支持向量机来实现一个线性分类,就像一句俗话所说,杀鸡焉用牛刀.也可以说核函数才是支持 ...

  5. validated 验证数组_Spring Boot 快速入门系列(VIII)—— 数据校验篇之 @Valid @Validated...

    点击上方蓝色字体关注我吧 一起学习,一起进步,做积极的人! 场景描述: 你还在业务代码或是控制层中校验接口传入参数的有效性和合法性吗?还是只做了前端参数校验,后端接口直接放行?这样的话,程序运行的正确 ...

  6. Java 校验注解的使用、自定义校验注解

    文章目录 一.引入依赖 二.基本校验 1. 常用校验注解 2. 自动校验 3. 代码中获取校验结果 三.嵌套校验 四.分组校验 五.单属性自定义校验规则 1. 功能:只能取枚举的值 六.多属性自定义联 ...

  7. 基于Spring Validation自定义校验注解

    常用的原生校验注解有: @NotNull 所有对象判空 @NotBlank 字符串判空 @NotEmpty 集合判空 自定义校验注解实现方式: 引入依赖 如果spring-boot版本小于2.3.x, ...

  8. 常用的校验注解之 @NotNull、@NotBlank、@NotEmpty 的区别

    实体字段校验 @NotNull.@NotEmpty.@NotBlank 1.@NotNull 不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其 ...

  9. 校验注解-- @NotNull、@NotEmpty、@NotBlank

    实体字段校验 @NotNull.@NotEmpty.@NotBlank 1.@NotNull:不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其 ...

最新文章

  1. 一个简单案例,带你看懂GC日志!
  2. 提高「搜商」,挣大钱
  3. layui-弹出层中如何关闭窗口
  4. Unity3D开发技巧:如何避开unity编辑器的那些坑
  5. memset详解 设置无穷大INF
  6. 【交通标志识别】基于matlab GUI模板匹配交通标志识别【含Matlab源码 1059期】
  7. pip离线下载安装依赖包,及github包,及常用pip源
  8. 绿联串口线linux驱动下载,usb转db9串口线驱动
  9. java多线程百度云_654619 汪文君Java多线程编程实战
  10. 二(高)阶多元微分方程数值解法(其一)
  11. Axure8.0激活码
  12. 图片相似度计算-模板匹配
  13. Ubuntu获取最高权限(su)的方式
  14. 10个精选国外免费空间
  15. 使用CyberController来将旧手机改造成电脑外挂
  16. 安卓键盘加上数字_安卓键盘键值对照表
  17. 小米miui查看连接过已保存的密码方法
  18. 拒绝面试造火箭,工作拧螺丝——Java经典面试题分享『带答案』
  19. flutter1.9升级flutter2.0错误整理
  20. 少一点虚荣,多一点务实

热门文章

  1. 动态规划之TSP(Travel Salesman Problem)算法
  2. chrome浏览器显示完整网址
  3. 为大家介绍一下自制DIY面膜的好地方
  4. 海思调试串口增加登录密码
  5. Moto android系統 流量,天翼旗舰 摩托罗拉Droid X ME811评测
  6. 冲冠一怒为代码:论程序员与负能量
  7. 创建账户类Account
  8. 后端接口返回一张图片
  9. (一)路径规划算法---Astar与C++可视化在RVIZ的二维栅格地图
  10. Android 图片全屏适配各种屏幕小技巧