下面是使用Hibernate-Validation进行参数验证的完整攻略。
1. 安装和配置
首先需要在项目中添加Hibernate-Validation的依赖,Maven坐标为:org.hibernate.validator:hibernate-validator:6.2.0.Final
。
然后要在JavaBean类中添加注解以进行验证,例如:
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@Size(min = 6, max = 16, message = "密码长度必须在6-16之间")
private String password;
// 省略get/set方法
}
在以上示例中,@NotNull
用于验证用户名不能为空,@Size
用于验证密码长度的范围。
2. 创建验证器
可以通过Validator
接口进行参数验证,创建Validator
对象的方法如下:
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
建议将Validator
对象定义为单例,可在系统启动时初始化一次即可。
3. 参数验证
有三种方式进行参数验证:
3.1. validate()方法
调用Validator
对象的validate()
方法进行参数验证,例如:
User user = new User();
user.setPassword("12345");
Set<ConstraintViolation<User>> violations = validator.validate(user);
if (!violations.isEmpty()) {
// 处理参数验证错误
}
violations
变量为参数验证不通过的结果集,可以通过ConstraintViolation
对象获取验证错误的详细信息,例如错误消息、错误字段、校验的值等。
3.2. validateProperty()方法
如果只想验证某个属性,可以使用validateProperty()
方法进行参数验证,例如:
User user = new User();
user.setUsername(null);
Set<ConstraintViolation<User>> violations = validator.validateProperty(user, "username");
if (!violations.isEmpty()) {
// 处理参数验证错误
}
以上示例中,只验证user
对象的username
属性。
3.3. validateValue()方法
如果只想验证某个属性的值,可以使用validateValue()
方法进行参数验证,例如:
Set<ConstraintViolation<User>> violations = validator.validateValue(User.class, "password", "12345");
if (!violations.isEmpty()) {
// 处理参数验证错误
}
以上示例中,只验证User
类的password
属性的值为12345
是否符合要求。
4. 自定义参数验证
如果默认的验证注解不能满足需求,可以自定义参数验证注解,例如:
@Target({ ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MyValidator.class)
public @interface MyConstraint {
String message() default "自定义验证注解错误";
// 省略其他参数
}
以上示例中,定义了一个名为MyConstraint
的自定义验证注解,并指定了一个名为MyValidator
的验证器类。
可以通过实现ConstraintValidator
接口来自定义参数验证器,例如:
public class MyValidator implements ConstraintValidator<MyConstraint, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
// 自定义验证逻辑
}
}
以上示例中,MyValidator
实现了ConstraintValidator
接口,并指定了验证逻辑的实现。
示例
以下是两条示例代码:
示例1:验证传入的JavaBean对象
假设现在有一个JavaBean类User
,需要验证其参数是否合法。可以按照如下步骤进行:
-
在
User
类中添加注解用于参数验证; -
创建
Validator
对象; -
调用
validate()
方法进行参数验证。
例如:
// 在User类中添加注解
public class User {
@NotNull(message = "用户名不能为空")
private String username;
@Size(min = 6, max = 16, message = "密码长度必须在6-16之间")
private String password;
// 省略get/set方法
}
// 验证User参数是否正确
User user = new User();
user.setUsername(null);
user.setPassword("12345");
Set<ConstraintViolation<User>> violations = validator.validate(user);
if (!violations.isEmpty()) {
// 处理参数验证错误
}
以上示例中,创建User
对象并赋值username
和password
属性,调用Validator
对象的validate()
方法进行参数验证。
示例2:验证传入的方法参数
假设现在有一段代码需要验证传入的username
参数是否合法。可以按照如下步骤进行:
-
创建
Validator
对象; -
调用
validateProperty()
方法进行参数验证。
例如:
// 在login方法中验证username参数是否正确
public void login(@NotNull(message = "用户名不能为空") String username, String password) {
Set<ConstraintViolation<Object>> violations = validator.validateProperty(this, "username");
if (!violations.isEmpty()) {
// 处理参数验证错误
} else {
// 处理方法逻辑
}
}
以上示例中,login()
方法的第一个参数为username
,调用Validator
对象的validateProperty()
方法进行参数验证。如果验证不通过,则抛出参数验证错误异常;如果验证通过,则正常执行方法逻辑。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA中通过Hibernate-Validation进行参数验证 - Python技术站