我已經創建了一個由@digits的JSR303複合註釋
@Digits(integer=12, fraction=0)
@Min(value=0)
@ReportAsSingleViolation
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ FIELD, METHOD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Constraint(validatedBy={})
public @interface PositiveInt {
String message() default "{positive.int.msg}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
我的問題是,我想重用這個註解,我想了@digits「整」值是複合註釋和@Min指定當PositiveInteger是使用
例如
public Demo{
@PositiveInteger(integer=1)
private Integer num1;
@PositiveInteger(integer=2)
private Integer num2;
}
其中NUM1可以是1-9,和NUM2可以是1-99。
這是甚至可能的,如果是這樣,我該怎麼做呢?
目前,我已經提供了一個定製ConstraintValidator在那裏我將不得不爲@digits和@Min
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ FIELD, ANNOTATION_TYPE, PARAMETER })
@Constraint(validatedBy=PositiveIntConstraintValidator.class)
public @interface PositiveInt {
String message() default "positive.int.msg";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
int integer() default 1;
}
public class PositiveIntConstraintValidator implements ConstraintValidator<PositiveInt, Number> {
private int maxDigits;
@Override
public void initialize(PositiveInt constraintAnnotation) {
maxDigits = constraintAnnotation.integer();
if (maxDigits < 1){
throw new IllegalArgumentException("Invalid max size. Max size must be a positive integer greater than 1");
}
}
@Override
public boolean isValid(Number value, ConstraintValidatorContext context) {
if (value == null){
return true;
}
else if (value instanceof Long || value instanceof Integer || value instanceof Short || value instanceof BigInteger){
String regex = "\\d{"0," + maxDigits + "}";
return Pattern.matches(regex, value.toString());
}
return false;
}
我認爲這是一種方式,但是您確定在類型檢查後需要regexp驗證嗎?你可以檢查字符串的大小 – hoaz
我發現很難理解你實際要問什麼,看起來你的代碼/例子也不一致。你可能會改述你的問題嗎? – Hardy