JSR 303 - Bean Validation 소개 및 사용 방법
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.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
ssm에서 ansible 해 본 메모 (그냥 메모)SSM EC2에 SSM 에이전트를 넣고 EC2를 SSM의 관리하에 놓습니다. SSM 관리형 인스턴스에서 볼 수 있다면 OK 참고 링크 S3 버킷 생성 Ansible 템플릿을 zip으로 만들어 S3에 배치하기 위해. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.