Hibernate-Validator 后端表单数据校验的使用示例详解
什么是 Hibernate-Validator
Hibernate-Validator 是一个 Java Bean 验证库,用于校验 Java Bean 中的数据是否符合特定规格和约束条件。因为这个库使用了注解来定义验证规则,所以相对于手写代码来说,易读性更好,更加直观。
如何使用 Hibernate-Validator
使用 Hibernate-Validator 的步骤如下:
- 引入依赖
<!-- hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.2.Final</version>
</dependency>
- 在需要验证的 Java Bean 字段上添加注解
public class User {
@NotEmpty(message = "用户名不能为空")
private String username;
@Size(min = 6, max = 12, message = "密码长度必须在 6-12 之间")
private String password;
@Email(message = "邮箱格式不正确")
private String email;
// 省略 getter 和 setter 方法
}
- 验证 Java Bean 的数据
public class ValidatorDemo {
public static void main(String[] args) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
User user = new User();
user.setUsername("");
user.setPassword("12345");
user.setEmail("notAEmail");
Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation<User> violation: violations) {
String message = violation.getMessage();
System.out.println(message);
}
}
}
在上述代码中,我们首先获取了 validator 对象。然后,我们创建了一个 User 对象并给他设置了一些无效的数据。最后,我们通过调用 validate 方法来验证数据,并遍历所有的验证失败信息。
示例1: 验证单个字符串
public class StringValidatorDemo {
public static void main(String[] args) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
String str = "too long";
Set<ConstraintViolation<String>> violations = validator.validate(str, MaxLength.class);
for (ConstraintViolation<String> violation : violations) {
String message = violation.getMessage();
System.out.println(message);
}
}
}
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = MaxLengthValidator.class)
public @interface MaxLength {
String message() default "The string is too long.";
int value();
}
public class MaxLengthValidator implements ConstraintValidator<MaxLength, String> {
private int maxValue;
@Override
public void initialize(MaxLength maxLength) {
this.maxValue = maxLength.value();
}
@Override
public boolean isValid(String s, ConstraintValidatorContext constraintValidatorContext) {
if (s == null) {
return true;
}
return s.trim().length() <= maxValue;
}
}
在上文的示例中,我们定义了一个 MaxLength
注解来表示字符串的最大长度。同时,我们还通过实现 MaxLenghtValidator
类来自定义验证逻辑。最后,我们使用 validator.validate(str, MaxLength.class)
方法来验证字符串。
示例 2: 验证集合中的元素
public class ListValidatorDemo {
public static void main(String[] args) {
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
List<String> list = Arrays.asList("item1", "", "item3");
Set<ConstraintViolation<List<String>>> violations = validator.validate(list, ListNotEmpty.class);
for (ConstraintViolation<List<String>> violation : violations) {
String message = violation.getMessage();
System.out.println(message);
}
}
}
@Target({ElementType.PARAMETER, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = NotEmptyListValidator.class)
public @interface ListNotEmpty {
String message() default "The list cannot be null or empty.";
}
public class NotEmptyListValidator implements ConstraintValidator<ListNotEmpty, List<?>> {
@Override
public boolean isValid(List<?> list, ConstraintValidatorContext constraintValidatorContext) {
if (list == null) {
return false;
} else {
for (Object o : list) {
if (o == null) {
return false;
}
if (o instanceof String) {
if (((String) o).trim().equals("")) {
return false;
}
}
}
}
return true;
}
}
在上述示例中,我们使用了自定义的 ListNotEmpty
注解以及 NotEmptyListValidator
验证器来验证一个 String 类型的集合中的元素是否为空或者为 null。这样,我们就可以确保集合中的每个元素都不为 null 或者空字符串。同时,我们通过验证器中的 instanceof
来判断每个元素是否为 String 类型,并使用 ((String) o).trim().equals("")
来判断元素是否为空。
总结
以上就是 Hibernate-Validator 后端表单数据校验的详细使用方法了。在开发过程中,我们可以根据具体的需要,来定义自己的注解和验证器,以达到我们需要的效果。如果您还有任何疑问,请在下方评论区留言,我们会在第一时间进行解答。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:hibernate-validator后端表单数据校验的使用示例详解 - Python技术站