一、常用注解@NotEmpty,@NotBlank,@NotNull介绍:
包位置:javax.validation.constraints.xxx
@NotEmpty 用在集合上面,一般用来校验List类型(不能注释枚举),而且长度必须大于0
@NotBlank 用在String上面,一般用来校验String类型不能为空,而且调用trim()后,长度必须大于0。
@NotNull 用在所有类型上面,一般用来校验Integer类型不能为空,但可以为empty。
需要搭配@Valid使用,在检验Controller的入参是否符合规范时
使用方法如下:
public JSONResult register(@Validated @RequestBody RegisterVo registerVo){}
public class RegisterVo {
@NotBlank(message = "昵称不能为空")
private String nickname;
@NotBlank(message = "手机号不能为空")
private String mobile;
@NotBlank(message = "密码不能为空")
private String password;
}
此包下的其他注解:
注解 | 含义 |
---|---|
@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) | 元素必须符合指定的正则表达式 |
元素必须是电子邮箱地址 | |
@Length | 字符串的大小必须在指定的范围内 |
@NotEmpty | 字符串必须非空 |
@Range | 元素必须在合理的范围内 |
二、@Valid与@Validated的使用与区别:
@Valid、@Validated 注解可以实现数据的验证,你可以定义实体,在实体的属性上添加校验规则
校验规则如上@NotEmpty,@NotBlank,@NotNull等等的注解就是,不加上就不会生效!
@Valid 包位置:javax.validation
@Validated 包位置 org.springframework.validation.annotation
是@Valid 的一次封装,是Spring提供的校验机制使用。
相同点: 在检验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();
}
不同点:
1、分组上:
@Valid 不支持分组, @Validated则支持分组验证。
2、使用位置:
@Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上
@Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
三、总结:
1、常用校验注解@NotEmpty,@NotBlank,@NotNull,需要搭配@Valid或@Validated使用
2、@Valid或@Validated 中有 BindingResult,可以获取校验失败情况下的反馈信息,如果不添加,默认情况下会抛出对应的异常。
3、@Validated无法单独提供嵌套验证功能。不能用在成员属性上,能配合嵌套验证注解@Valid进行嵌套验证。
@Valid无法单独提供嵌套验证功能。能够用在成员属性上,能配合嵌套验证注解@Valid进行嵌套验证。