参数类似于@Size 的自定义 JPA Bean 验证
Custom JPA Bean Validator with parameters similiar to @Size
我希望为类似于 @Size
注解的注解实现 JPA Bean 验证器,因此允许在注解上使用参数 min
和 max
。我一直在查看文档和各种示例,但找不到允许在注释上使用多个参数的实现。
目前我的代码是这样的
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = CapacityImpl.class)
public @interface Capacity {
String message() default "Capacity not in valid Range";
// Required by validation runtime
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
最终的注释应该是这样的 @Capacity(min=19, max=40)
public class CapacityImpl implements ConstraintValidator<Capacity, Integer> {
@Override
public void initialize(Capacity capacity) {
}
@Override
public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {
return false;
}
}
所以我的问题是我如何必须更改此接口和 class 以实际允许注释上的参数 min 和 max,这样我就可以使用这些参数值验证字段的值
只需将它们添加到您的注释定义中即可:
public @interface Capacity {
String message() default "Capacity not in valid Range";
// Required by validation runtime
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int min();
int max();
}
public @interface Capacity {
String message() default "Capacity not in valid Range";
// Required by validation runtime
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int min();
int max();
}
验证者class
@Component
public class CapacityValidator implements ConstraintValidator<Capacity, String> {
private int min;
private int max;
@Override
public void initialize(Capacity constraintAnnotation){
this.min = constraintAnnotation.min();
this.max = constraintAnnotation.max();
}
@Override
public boolean isValid(String capacity, ConstraintValidatorContext constraintValidatorContext) {
//validate logic here e.g
if(capacity > this.min){
return true;
}
}
}
我希望为类似于 @Size
注解的注解实现 JPA Bean 验证器,因此允许在注解上使用参数 min
和 max
。我一直在查看文档和各种示例,但找不到允许在注释上使用多个参数的实现。
目前我的代码是这样的
@Target({ FIELD, METHOD, PARAMETER, ANNOTATION_TYPE })
@Retention(RUNTIME)
@Constraint(validatedBy = CapacityImpl.class)
public @interface Capacity {
String message() default "Capacity not in valid Range";
// Required by validation runtime
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
最终的注释应该是这样的 @Capacity(min=19, max=40)
public class CapacityImpl implements ConstraintValidator<Capacity, Integer> {
@Override
public void initialize(Capacity capacity) {
}
@Override
public boolean isValid(Integer integer, ConstraintValidatorContext constraintValidatorContext) {
return false;
}
}
所以我的问题是我如何必须更改此接口和 class 以实际允许注释上的参数 min 和 max,这样我就可以使用这些参数值验证字段的值
只需将它们添加到您的注释定义中即可:
public @interface Capacity {
String message() default "Capacity not in valid Range";
// Required by validation runtime
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int min();
int max();
}
public @interface Capacity {
String message() default "Capacity not in valid Range";
// Required by validation runtime
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
int min();
int max();
}
验证者class
@Component
public class CapacityValidator implements ConstraintValidator<Capacity, String> {
private int min;
private int max;
@Override
public void initialize(Capacity constraintAnnotation){
this.min = constraintAnnotation.min();
this.max = constraintAnnotation.max();
}
@Override
public boolean isValid(String capacity, ConstraintValidatorContext constraintValidatorContext) {
//validate logic here e.g
if(capacity > this.min){
return true;
}
}
}