1、接口注释
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = {IncrementalValidator.class})
public @interface IncrementalInteger { String message() default "{common.incrementalInteger.Pattern}"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {}; /**
* @return value the element must be larger or equal to
*/
int min(); /**
* @return value the element must be smaller or equal to
*/
int max(); /**
* @return value must be incremental
*/
int increment(); /**
* Defines several {@link IncrementalInteger} annotations on the same
* element.
*
* @see IncrementalInteger
*/
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
@Documented
@interface List { IncrementalInteger[] value();
}
}
2、Validator类
public class IncrementalValidator implements ConstraintValidator<IncrementalInteger, Integer> { private IncrementalInteger constraintAnnotation; @Override
public void initialize(IncrementalInteger constraintAnnotation) {
this.constraintAnnotation = constraintAnnotation;
} @Override
public boolean isValid(Integer value, ConstraintValidatorContext context) {
int min = constraintAnnotation.min();
int increment = constraintAnnotation.increment();
int max = constraintAnnotation.max();
if (value < min) {
return false;
} if (value > max) {
return false;
} if ((value - min) % increment != 0) {
return false;
} return true;
}
}