使用javax.validation约束或注释进行信用卡到期日验证

使用javax.validation约束或注释进行信用卡到期日验证,java,rest,validation,constraints,javax,Java,Rest,Validation,Constraints,Javax,我有一个RESTAPI,它将信用卡信息作为输入并进行处理。我正在使用各种javax.validation注释,例如@NotNull来验证强制数据 如何验证信用卡的有效期 注意:信用卡到期日不包含日期。它只包含月份和年份。示例:12/17,这意味着该卡将于2107年12月到期 public class CreditCardData { @NotNull private Long cardNo @NotNull //WHAT ANNOTATION SHOULD I

我有一个RESTAPI,它将信用卡信息作为输入并进行处理。我正在使用各种javax.validation注释,例如@NotNull来验证强制数据

如何验证信用卡的有效期

注意:信用卡到期日不包含日期。它只包含月份和年份。示例:12/17,这意味着该卡将于2107年12月到期

public class CreditCardData {

    @NotNull
    private Long cardNo

    @NotNull
    //WHAT ANNOTATION SHOULD I PUT HERE SO THAT IT IS FUTURE DATE ?????
    //WILL CONTAIN ONLY MON/YY, EXAMPLE: 12/17
    private String expiryDate

}

我不知道有什么现成的注释可以验证卡的过期,但是创建自己的注释非常容易

创建注释:

@Target({ METHOD, FIELD, PARAMETER })
@Retention(RUNTIME)
@Constraint(validatedBy = CardExpirationValidator.class)
public static @interface CardExpiration {
    String message() default "Expiration invalid";

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

    Class<? extends Payload>[] payload() default {};
}
现在,您可以像这样注释参数和字段:

public static class CardExpirationValidator implements ConstraintValidator<CardExpiration, String> {
    @Override
    public void initialize(CardExpiration annotation) {
        //Not much to do - this is invoked before "isValid", and can be used to pass annotation parameters
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        //Insert validation logic for "value" here. Return true/false
    }
}
public class CreditCardData {

    @NotNull
    private Long cardNo;

    @NotNull
    @CardExpiration
    private String expiryDate;
}

请参阅有关此主题的文档。

我不知道有现成的注释可以验证卡的过期,但创建自己的注释非常容易

创建注释:

@Target({ METHOD, FIELD, PARAMETER })
@Retention(RUNTIME)
@Constraint(validatedBy = CardExpirationValidator.class)
public static @interface CardExpiration {
    String message() default "Expiration invalid";

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

    Class<? extends Payload>[] payload() default {};
}
现在,您可以像这样注释参数和字段:

public static class CardExpirationValidator implements ConstraintValidator<CardExpiration, String> {
    @Override
    public void initialize(CardExpiration annotation) {
        //Not much to do - this is invoked before "isValid", and can be used to pass annotation parameters
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        //Insert validation logic for "value" here. Return true/false
    }
}
public class CreditCardData {

    @NotNull
    private Long cardNo;

    @NotNull
    @CardExpiration
    private String expiryDate;
}
有关此主题,请参阅的文档