1.背景
实际开发中,很多时候要对参数校验,比如为空等,
除了要在接口的入口处使用,很多普通方法也需要检查,比如service方法,
那么如何在service上使用这个参数校验呢?
2.使用方式
步骤一:
在service接口上加上@Validated
步骤二:
1.方法参数是对象,service接口的方法参数上添加注解@Valid
2.方法参数非对象,直接使用@NotNull、@NotBlank等
3.如果是嵌套对象的话,里面的对象还要添加 @Valid注解,
注:@NotBlank、@NotEmpty需使用org.hibernate.validator包下的注解,否则注解不生效。
3.分组检验
步骤一:
自定义没有方法的接口
步骤二:
在成员属性(字段)指定我们需要哪个group的校验
步骤三:
在接口方法上指定我们需要哪个group的校验
注:用了分组校验之后,@Min,@Max等可能会失效,可以为这些注解指定group。
groups = {Default.class, Create.class}
4. @Validated和@Valid的区别
1. 分组
- @Validated:提供了一个分组功能,可以在入参验证时,根据不同的分组采用不同的验证机制。没有添加分组属性时,默认验证没有分组的验证属性。
2. 注解地方
- @Validated:可以用在类型、方法和方法参数上。但是不能用在成员属性(字段)上
- @Valid:可以用在方法、构造函数、方法参数和成员属性(字段)上。
- 两者是否能用于成员属性(字段)上直接影响能否提供嵌套验证的功能。
3. 嵌套验证
- @Validated:用在方法入参上无法单独提供嵌套验证功能。不能用在成员属性(字段)上,也无法提示框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。
- @Valid:用在方法入参上无法单独提供嵌套验证功能。能够用在成员属性(字段)上,提示验证框架进行嵌套验证。能配合嵌套验证注解@Valid进行嵌套验证。