天天看点

javax.validation 自定义校验注解

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Target( {ElementType.FIELD, ElementType.METHOD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = TypeEnumValidator.class)
@Documented
public @interface TypeConstraint {
    String message() default "pricing rule type is incorrect";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}
           
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
import java.util.Arrays;

public class TypeEnumValidator implements ConstraintValidator<TypeConstraint, Type> {

    private String message;

    @Override
    public void initialize(PriceRuleTypeConstraint annotation) {
        message = annotation.message();
    }

    @Override
    public boolean isValid(type value, ConstraintValidatorContext context) {
        return Arrays.stream(Type.values()).anyMatch(type -> Type.equals(value));
    }
}
           
public enum Type {
    TIME,
    DATE,
    DATE_TIME
}