java validation validator 验证器

实体字段校验 @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("参数校验成功");
    }
}

 

上面源码可以看到,testParam接口和testOrderParam两个接口使用的注解不一样,一个是@Valid、另一个是@Validated,两个稍有区别,前者使得当前对象内属性校验生效,如果包含对象属性,则对象属性自身的属性校验无法生效,而后者注释的对象,对象内部配合@Valid可以使得对象内部的对象属性的属性校验规则生效。

总结一下 @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下注解的实现。

 

posted @ 2021-10-03 19:49  流失的痕迹  阅读(2691)  评论(0编辑  收藏  举报