实体字段校验 @NotNull、@NotEmpty、@NotBlank
1.@NotNull
不能为 null,但可以为 empty,一般用在 Integer 类型的基本数据类型的非空校验上,而且被其标注的字段可以使用 @size、@Max、@Min 对字段数值进行大小的控制
2.@NotEmpty
不能为 null,且长度必须大于 0,一般用在集合类上或者数组上
3.@NotBlank
只能作用在接收的 String 类型上,注意是只能,不能为 null,而且调用 trim() 后,长度必须大于 0即:必须有实际字符
注意在使用 @NotBlank 等注解时,一定要和 @valid 一起使用,否则 @NotBlank 不起作用。
一个 BigDecimal 的字段使用字段校验标签应该为 @NotNull。
在使用 @Length 一般用在 String 类型上可对字段数值进行最大长度限制的控制。
在使用 @Range 一般用在 Integer 类型上可对字段数值进行大小范围的控制。
@RequestMapping("/hello") @RestController @Api(tags = "HelloWorld 入口") public class HelloWorld { @GetMapping("/world") @ApiOperation(value = "helloWorld") public String helloWorld() { return "hello world!"; } @PostMapping("/test/param") @ApiOperation(value = "testParam") public BaseResponse<String> testParam( @Valid @RequestBody BaseRequest baseRequest ) { return BaseResponse.successResponse("参数校验成功"); } @ApiOperation(value = "testOrderParam") @PostMapping("/test/order") public BaseResponse<String> testOrderParam( @Validated @RequestBody OrderRequest baseRequest ) { return BaseResponse.successResponse("参数校验成功"); } }
总结一下 @Validated 和 @Valid 在嵌套验证功能上的区别:
@Validated: 用在方法入参上无法单独提供嵌套验证功能。不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。
@Valid: 用在方法入参上无法单独提供嵌套验证功能。能够用在成员属性(字段)上,提示验证框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。
Bean Validation规范中包含的22个注解,也就是validation-api(jakarta.validation-api)实现的注解:
每个注解都有message,groups,payload这三个属性,这是Bean Validation规范的要求。下表还列出了每个注解自有的一些属性。
hibernate-validator
额外实现的注解:
注解的可以到org.hibernate.validator.constraints包下面自行查看,这里仅列举几个常用的注解。
校验实现可以到org.hibernate.validator.internal.constraintvalidators包下面自行查看。其中bv包下是对javax.validation下注解的实现,hv包下是对org.hibernate.validator下注解的实现。