一. @Valid 和 @Validated的作用:
用于前端传入的数据进行校验, 避免大量的if else语句的出现,
二. Valid 的用法:
1. @Valid是属于javax.validation.Valid包下的, 是jdk提供的, @Validated是org.springframework.validation.annotation包下的注解, 是spring提供的.
2. 功能上不同: @Validated功能更加强大, 在@Valid的基础上又提供了分组的功能和验证排序功能.
3. 实用的位置不同. @Valid可以在方法 , 构造函数, 方法参数和成员属性上, @Validated可以使用在类型, 方法, 方法参数上, 但是不可以使用在成员属性字段上.
4. 首先, 要在实体类的相关字段上添加需要校验的注解@NotBlank() 或者@Min()
5. 然后再controller层的方法要校验的参数上添加@Valid注解
Validated的使用方法:
@Validated是@Valid的封装, 在@Valid的基础上增加了验证排序的功能.
分组功能的使用
当一个实体类需要多种验证方式时,比如:添加时需要对姓名进行非空验证,修改时需要对id进行验证,而添加时就不需要对id进行验证。
首先,定义两个分组的接口:
public interface Add{
}
public interface Update{
}
其次,在实体类上使用@Validated的分组功能。
@Data
public class Person {
@NotEmpty(groups = Update.class, message = "更新时候id不能为空")
private Long id;
@NotEmpty(groups = Add.class, message = "姓名不能为空")
private String name;
}
在controller中,使用分组进行接口验证。
@RestController
@Slf4j
public class VerifyController {
@PostMapping(value = "/validated/add")
public void add(@Validated(value = Add.class) @RequestBody Person person) {
...
}
@PostMapping(value = "/validated/update")
public void update(@Validated(value = Update.class) @RequestBody Person person) {
...
}
}