JSR 303 - Bean Validation 소개 및 사용 방법

JSR - 303 소개
JSR - 303 은 JAVA EE 6 중의 하위 규범 으로 Bean Validation 이 라 고 하 는데 공식 적 으로 참고 하여 실현 하 는 것 은 Hibernate Validator 이다.
이 실현 은 Hibernate ORM 과 아무런 관계 가 없다.JSR 303 은 자바 빈 의 필드 값 을 검증 하 는 데 사 용 됩 니 다.Spring MVC 3. x 에서 도 JSR - 303 을 지원 하여 컨트롤 러 에서 폼 에 제출 한 데 이 터 를 편리 하 게 검증 할 수 있 습 니 다.주: 주 해 를 사용 하여 검증 할 수 있 습 니 다.
2. 검증 준비 시 사용 하 는 JAR
vaidation - api - 1.0.0. GA. jar: JDK 인터페이스;hibenate - vaidator - 4.2.0. Final. jar 는 상기 인터페이스 에 대한 실현 입 니 다.log4j、slf4j、slf4j-log4j
3. JSR 303 기본 검사 규칙
빈 검사 @ Null 인증 대상 이 null @ NotNull 인증 대상 이 null 이 아 닌 지 확인 할 수 없습니다. 길이 가 0 인 문자열 @ NotBlank 에서 제약 문자열 이 Null 인지, Trim 의 길이 가 0 이상 인지, 문자열 만 있 는 지 확인 할 수 없습니다. @ NotEmpty 는 제약 요소 가 NULL 또는 EMPTY 인지 확인 합 니 다.
Booelan 검사 @ AssertTrue 검증 Boolean 대상 이 true @ AssertFalse 인지 검증 Boolean 대상 이 false 인지
길이 검사 @ Size (min =, max =) 검증 대상 (Array, Collection, Map, String) 길이 가 주어진 범위 내 에 있 는 지 확인 합 니 다 @ Length (min =, max =) Validates that the annotated string is between min and max included.
날짜 검사 @ Past 검증 Date 와 Calendar 대상 이 현재 시간 이전에 있 는 지 확인 합 니 다. 인증 이 성립 되면 설명 되 는 요 소 는 반드시 과거의 날짜 입 니 다 @ Future 검증 Date 와 Calendar 대상 이 현재 시간 이후 에 있 는 지 확인 합 니 다.인증 이 성립 되면 설명 되 는 요 소 는 반드시 미래의 날짜 @ Pattern 에서 String 대상 이 정규 표현 식 규칙 에 부합 하 는 지 검증 합 니 다. 설명 되 는 요 소 는 제 정 된 정규 표현 식 에 부합 합 니 다. regexp: 정규 표현 식 flags: Pattern. Flag 의 배열 을 지정 하여 정규 표 달 식 과 관련 된 옵션 을 표시 합 니 다.
수치 검 사 는 Stirng, Integer 형식 에 사용 하 는 것 을 권장 합 니 다. int 형식 에 사용 하 는 것 을 권장 하지 않 습 니 다. 폼 값 이 "" 일 때 int 로 변환 할 수 없 지만 Stirng 으로 변환 할 수 있 습 니 다. ""Integer 는 null @ Min 으로 Number 와 String 대상 이 지정 한 값 과 큰 지 검증 합 니 다. @ Max 인증 Number 와 String 대상 이 지정 한 값 과 작은 지 확인 합 니 다. @ DecimalMax 가 표 시 된 값 은 제약 에서 지정 한 최대 값 보다 크 지 않 아야 합 니 다. 이 제약 매개 변 수 는 BigDecimal 을 통 해 정 의 된 최대 값 의 문자열 입 니 다. 소수 에 정밀도 가 존재 합 니 다 @ DecimalMin 이 표 시 된 문자열 입 니 다.값 은 제약 조건 에서 지정 한 최소 값 보다 작 지 않 아야 합 니 다. 이 제약 조건 의 매개 변 수 는 BigDecimal 을 통 해 정 의 된 최소 값 을 나타 내 는 문자열 입 니 다. 소수 에 정밀도 가 존재 합 니 다 @ Digits 검증 Number 와 String 의 구성 이 합 법 적 인지 @ Digits (integer =, fraction =)문자열 이 지정 한 형식 에 맞 는 숫자 인지 검증 합 니 다. interger 는 정수 정 도 를 지정 합 니 다. fraction 은 소수 정 도 를 지정 합 니 다. @ Range (min =, max =) 가 지정 한 요 소 는 적당 한 범위 내 에서 @ Range (min = 10000, max = 50000, message = "range. bean. wage") @ Valid 가 재 귀 하 는 관련 대상 을 검증 해 야 합 니 다. 관련 대상 이 집합 이나 배열 이 라면...그러면 그 중의 요 소 를 재 귀적 으로 검사 하고 맵 이 라면 그 중의 값 부분 을 검사 합 니 다. (재 귀적 검증 여부) @ CreditCardNumber 신용카드 검증 @ Email 은 메 일 주소 인지, null 이면 검증 하지 않 으 면 검증 을 통과 합 니 다. @ScriptAssert(lang= ,script=, alias=) @URL(protocol=,host=, port=,regexp=, flags=)
사례 분석
사용 할 때 자바 빈 을 직접 주석 하면 속성 에 대한 검증 도 가능 합 니 다.
public class Order {
    //      null,     10
    @NotNull
    @Size(min = 10, max = 10)
    private String orderId;
    //      
    @NotEmpty
    private String customer;
    //            
    @Email
    private String email;
    //      
    @NotEmpty
    private String address;
    //      null,           'created', 'paid', 'shipped', 'closed'    
    // @Status         contraint
    @NotNull
    @Status
    private String status;
    //      null
    @NotNull
    private Date createDate;
    //     
    @Valid
    private Product product;

   // getter  setter  
}


또 예:
    @NotNull(message = "adultTax    ")
    private Integer adultTax;

    @NotNull(message = "adultTaxType    ")
    @Min(value = 0, message = "adultTaxType      0")
    @Max(value = 1, message = "adultTaxType      1")
    private Integer adultTaxType;

    @NotNull(message = "reason       ")
    @Pattern(regexp = "[1-7]{1}", message = "reason     1-7      ")
    private String reason;//      

5. 다음은 완전한 예 이다.
public class ValidateTestClass{

    @NotNull(message = "reason       ")
    @Pattern(regexp = "[1-7]{1}", message = "reason     1-7      ")
    private String reason;//      

    //get、set  、      、      、toString    

    /**
     *     :             
     * @return
     */
    public void validateParams() {
        //  JSR303    ,    
        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        Set> violations = validator.validate(this);
        Iterator> iter = violations.iterator();
        if (iter.hasNext()) {
            String errMessage = iter.next().getMessage();
            throw new ValidationException(errMessage);
        }
    }
}

우 리 는 테스트 클래스 를 써 서 검증 할 수 있다.
public class ValidateTestClassValidateTest{

    @Test
    public void validateParam(){
        ValidateTestClass validateTestClass = new ValidateTestClass();
        validateTestClass .setReason(12);

        validateTestClass .validateParams(); //       
    }
}

ok!이렇게 하면 테스트 를 진행 할 수 있다.
또한 저 희 는 사용 할 때 특정한 검증 규칙 이 데이터 형식 에 적용 되 는 것 을 주의해 야 합 니 다. 쉽게 말 하면 정규 표현 식 의 검증 대상 은 String 형식 일 수 있 지만 Integer 형식의 데 이 터 는 안 됩 니 다. 그러면 정규 표현 식 을 사용 하여 검증 할 때 오류 가 발생 할 수 있 습 니 다.다음 과 유사:
javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer.
at org.hibernate.validator.internal.engine.constraintvalidation.ConstraintValidatorManager.verifyResolveWasUnique(ConstraintValidatorManager.java:218)

이 검 증 된 주 해 는 이 유형 에 대해 주 해 를 해 서 는 안 된다 는 뜻 이다.
여기까지. OK.

좋은 웹페이지 즐겨찾기