我有一个REST API,它将信用卡信息作为输入并进行处理。我正在使用各种javax.validation注释(如@NotNull)来验证必需数据。
如何验证信用卡上的失效日期?
注意:信用卡到期日不包含日期。它只包含月份和年份。示例:12/17表示该卡将于12月210日到期。
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
}
答案 0 :(得分:2)
我不知道一个现成的注释来验证卡片过期,但是创建自己的注释很容易。
创建注释:
@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 {};
}
请注意javax.validation.Constraint
注释 - 它表示CardExpiration注释是由另一个类CardExpirationValidator.class
验证的约束。因此,让我们继续使用我们的验证逻辑编写该类。它会是这样的:
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;
}