https://mvnrepository.com
1. Bean Validation API » 2.0.1.Final
2. Hibernate Validator Engine » 6.2.5.Final
<properties>
<javax.validation-version>2.0.1.Final</javax.validation-version>
<org.hibernate.validator-version>6.2.5.Final</org.hibernate.validator-version>
</properties>
<dependencies>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${javax.validation-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator -->
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${org.hibernate.validator-version}</version>
</dependency>
</dependencies>
Url 직접 입력하고 들어오는 경로와 화면쪽에서 입력된 값을 검증하는 부분이 GET, POST방식으로 이루어지기 때문에 Mapping되는 페이지가 같아도 상관이 없다.
화면쪽에서 입력된 값들을 맵핑할 Dto클래스가 필요하다.(@Valid 어노테이션을 붙여줘야 한다.)
유효성 검사를 통과하지 못한 값들이 BindingResult 인터페이스에 저장이 된다.
잘못된 값들에 대한 처리를 한 이후 페이지를 이동한다.
@InitBinder 어노테이션을 붙인 initBinder 메소드를 작성하여 별로도 만든 Validator를 등록하고 사용할 수 있다.
화면에서 입력한 값을 받아서 처리하기 위한 용도로 만든 클래스
유효성 검증 어노테이션 종류
/*
@AssertTrue : true
@AssertFalse : false
@Max : value 값이 최대 (value값 보다 크면 오류)
@Min : value 값이 최소 (value값 보다 작으면 오류)
@DecimalMax(value=, inclusive=true/false) : value 값이 최대! true value<=, false value <
ex) DecimalMax(value=100, inclusive=false) < 100
ex) DecimalMax(value=100, inclusive=true) <= 100
@DecimalMin(value=, inclusive=true/false)
@Null : Null 이어야 한다. (값이 없어야 정상)
@NotNull : Null 이 아니어야 한다. (값이 있어야 정상)
@Digits(integer=3, fraction=5) : 숫자 자릿수!! integer(정수형 3자리수) fraction(소수점자릿수 5자리)
@Size(min=5, max=10) : 글자 자릿수 (5~10자리면 정상)
@Pattern(regexp=정규식) : 정규식에 맞아야 정상!
ex) @Pattern(regexp="^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$");
@NotEmpty : 값이 뭐라도 있어야 정상! (띄어쓰기 입력하면 인정)
@NotBlank : 값이 뭐라도 있어야 정상! (띄어쓰기 제외, 뭐라도 입력)
@Positive : 양수가 들어와야 정상!
@PositiveOrZero : 양수 + 0 까지 인정
@Negative : 음수가 들어와야 정상!
@NegativeOrZero : 음수 + 0 까지 인정
@Email : 이메일 형식이 맞아야한다. (입력값 사이에 @가 있는지 정도를 체크)
ex) ab@cd : 이메일로 인정
*/
<label>input1<input type="text" name="input1" value="${inputFormDto.input1}"></label><br/><!-- maxlength="8" -->
<span class="errMsg">
<spring:hasBindErrors name="inputFormDto">
<c:if test="${errors.hasFieldErrors('input1')}">
<!-- input1은 8~14자리 인데 잘못입력한것 같다. -->
<spring:message code="${errors.getFieldError('input1').codes[0]}"></spring:message>
</c:if>
${errors.getFieldError('input1').defaultMessage}
</spring:hasBindErrors>
</span>
#valid_view 페이지 input 에러 메시지
Size.inputFormDto.input1=8~14자리로 입력해주세요.
Max.inputFormDto.input2=1000 아래로 입력해주세요.
NotBlank.inputFormDto.input3=필수 입력 항목입니다.
input2.hasError.inputFormDto.input2=자체적으로 만든 validator에서 나온 코드.
input1.sizeError.inputFormDto.input1=12자리는 안된다.
#other_page 페이지 input 에러메시지
Validator Interface를 구현한다.
support 메소드의 return 부분
return InputFormDto.class.isAssignableFrom(clazz);
InputFormDto inputFormDto = (InputFormDto)target;
//8~14 //8~11 //12자리는 안된다. 13~14
if(inputFormDto.getInput1().length() == 12) {
//rejectValue(필드명, 에러코드, defaultMessage);
errors.rejectValue("input1", "input1.sizeError", "12자리는 불가능");
}
errors.rejectValue("input2", "input2.hasError", "이러면 무조건 에러가 발생한다.");
<beans:bean class="org.springframework.context.support.ReloadableResourceBundleMessageSource" id="messageSource">
<!-- 1개 등록 -->
<beans:property name="basename" value="/WEB-INF/properties/property01"></beans:property>
<!-- n개 등록 -->
<beans:property name="basenames">
<beans:list>
<beans:value>/WEB-INF/properties/property01</beans:value>
<beans:value>/WEB-INF/properties/property02</beans:value>
<beans:value>/WEB-INF/properties/property03</beans:value>
</beans:list>
</beans:property>
</beans:bean>