2017-09-28 17 views
0

신용 카드 정보를 입력으로 처리하는 REST API가 있습니다. 필자는 필수 데이터의 유효성을 검사하기 위해 @NotNull과 같은 다양한 javax.validation 주석을 사용하고 있습니다.javax.validation 제약 조건 또는 주석을 사용하여 신용 카드 만료일 유효성 확인

신용 카드의 유효 기간을 어떻게 확인할 수 있습니까?

참고 : 신용 카드 만료일에는 날짜가 포함되어 있지 않습니다. 월과 연도 만 있습니다. 예 : 12/17 카드 12 월 2107

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 

} 

답변

1

내가 카드 만료를 검증하는 기성품 주석의 모르는에 만료되지만 자신을 만드는 것은 매우 쉽습니다 것을 의미한다.

은 주석 작성 :

@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 주석 - CardExpirationValidator.class - 그것은 CardExpiration 주석이 다른 클래스에 의해 검증 제약이 있다고 말한다. 이제 우리의 검증 로직을 사용하여 클래스를 작성해 보겠습니다.

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; 
} 

참조 Jersey의/JBoss의 설명서 주제에이 같은 될 것입니다.