Java JSR303复合注释
我创建了一个由@Digits和@Min组成的复合注释Java JSR303复合注释,java,bean-validation,Java,Bean Validation,我创建了一个由@Digits和@Min组成的复合注释 @Digits(integer=12, fraction=0) @Min(value=0) @ReportAsSingleViolation @Documented @Retention(RetentionPolicy.RUNTIME) @Target( { FIELD, METHOD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Constraint(validatedBy={}) public
@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 {};
}
@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;
}
其中num1可以是1-9,num2可以是1-99
这可能吗?如果可能,我该怎么做
目前,我必须提供一个定制的ConstraintValidator,在这里我可以得到@Digits和@Min的验证码
@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 {};
}
@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;
}
@已记录
@保留(RetentionPolicy.RUNTIME)
@目标({字段,注释类型,参数})
@约束(validatedBy=PositiveIntConstraintValidator.class)
public@interface-PositiveInt{
字符串消息()默认为“positive.int.msg”;
类[]组()默认值{};
类您可以利用:
@位(整数=0,分数=0)
@最小值(值=0)
@报告违规行为
@记录
@保留(RetentionPolicy.RUNTIME)
@目标({字段、方法、注释类型、构造函数、参数})
@约束(validatedBy={})
public@interface-PositiveInteger{
字符串消息()默认值“{positive.int.msg}”;
类[]组()默认值{};
Classi认为这是一种方法,但您确定在类型检查后需要regexp验证吗?您可以只检查字符串的大小。我发现很难理解您实际提出的问题,而且您的代码/示例似乎也不一致。您可以重新表述您的问题吗?谢谢。我想这就是我一直在寻找的。我我来试试。这正是我想要的。OP应该接受这个答案。