自定义Hibernate Validation注解可以通过以下步骤来完成:
1. 定义注解
自定义注解需要使用@Constraint
注解进行标记,并提供以下信息:
validatedBy
:用于指定执行验证逻辑的验证器类;message
:用于指定验证不通过时返回的错误消息;groups
:用于指定验证所属的组,默认情况下采用javax.validation.groups.Default
组;payload
:用于扩展验证器的数据负载,一般情况下不需要使用。
例如,我们可以定义一个验证年龄范围的注解Range
,其代码如下:
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = RangeValidator.class)
public @interface Range {
String message() default "{Range}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int min();
int max();
}
2. 编写验证器
验证器必须实现ConstraintValidator
接口,并使用上面定义的注解进行标记。在验证器中,我们需要实现initialize
和isValid
方法,分别用于初始化和执行验证逻辑。
例如,我们可以定义一个验证器RangeValidator
,其代码如下:
public class RangeValidator implements ConstraintValidator<Range, Integer> {
private int min;
private int max;
public void initialize(Range constraint) {
this.min = constraint.min();
this.max = constraint.max();
}
public boolean isValid(Integer value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
return value >= min && value <= max;
}
}
3. 使用自定义注解
在代码中使用自定义注解,可以采用以下两种方式:
3.1 在属性上使用注解
例如,我们可以在实体类中定义一个年龄属性,并使用Range
注解进行验证,代码如下:
public class Person {
@Range(min = 18, max = 60, message = "Age should between {min} and {max}")
private Integer age;
// getter/setter
}
3.2 在方法参数上使用注解
例如,我们可以定义一个服务层方法findPerson
,并在其中定义一个年龄参数,并使用@Valid
注解进行验证,代码如下:
public List<Person> findPerson(@Range(min = 18, max = 60, message = "Age should between {min} and {max}") Integer age) {
// ...
}
以上就是自定义Hibernate Validation注解的完整攻略。除了以上两个示例,还可以自定义其他的注解,比如验证手机号码格式、验证字符串长度等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何自定义hibernate validation注解示例代码 - Python技术站