Java中Validated、Valid 、Validator区别详解
背景介绍
在Java中,我们经常会使用各种注解来实现校验的功能。其中,@Valid、@Validated和Validator三种方式是比较常用的。本文将详细讲解它们的区别。
@Validated与@Valid注释
@Validated
和@Valid
注释是两种校验注释。它们的职责是调用验证框架处理带注释的参数、方法返回值和字段。它们的作用是在控制器类的方法或方法参数上进行校验,主要校验常规数据类型,如String、Integer、Boolean。两者区别在于,@Validated
更加强制性,会检测方法、属性、方法参数等,而@Valid
注释只支持方法参数。
示例代码如下:
@GetMapping("/user")
public User getUserInfo(@Validated @RequestParam("id") Integer id) {...}
@PostMapping("/user")
public void addUser(@RequestBody @Valid User user){...}
在上面的示例中,@Validated
和@Valid
注释均用于参数上,实现对参数的校验。这里的@RequestParam
和@RequestBody
注释表示将请求参数自动绑定到方法参数。
Validator校验器
Validator
是Java Bean Validation标准API的主要接口。它定义了一组用于验证Java Bean的方法,包括一些可自定义的约束注释。
示例代码如下:
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return User.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;
if (user.getName() == null || user.getName().isEmpty()) {
errors.rejectValue("name", "name.empty", "用户名不能为空");
}
if (user.getAge() != null && user.getAge() < 0) {
errors.rejectValue("age", "age.invalid", "年龄必须大于等于0");
}
}
}
在上面的示例中,supports()
方法用于判断是否支持校验对象,validate()
方法则重写验证方法,实现了对用户对象的校验逻辑。
在实际使用中,我们可以使用Validator
自定义注解,例如:
public class User {
@NotNull(message = "用户名不能为空")
private String name;
@PositiveOrZero(message = "年龄必须大于等于0")
private Integer age;
//getter、setter方法省略
}
Java Bean Validation标准API提供了多种约束注释,如@NotNull
、@NotBlank
、@Positive
等,可以方便地实现各种数据校验。
结论
总之,@Validated
和@Valid
注释是用于控制器类和其方法参数上的校验注释,主要校验常规数据类型。而Validator
是Java Bean Validation标准API的主要接口,其主要作用是提供了多种约束注释,可以方便地实现各种数据校验。
参考资料
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java中Validated、Valid 、Validator区别详解 - Python技术站