[23.12.26] 95일차
<<진도>>
[Back-end] Spring Framework
form 검증(@어노테이션, validation)
1. hibernate validate
Maven 의존성에 추가 pom.xml
https://mvnrepository.com/artifact/org.hibernate/hibernate-validator/6.0.23.Final
https://mvnrepository.com/artifact/javax.validation/validation-api/2.0.1.Final
spring.io validation
https://spring.io/guides/gs/validating-form-input/
(Spring Boot 기준)
PersonForm을 만들고
package com.example.validatingforminput;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Size;
public class PersonForm {
@NotNull
@Size(min=2, max=30)
private String name;
@NotNull
@Min(18)
private Integer age;
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String toString() {
return "Person(Name: " + this.name + ", Age: " + this.age + ")";
}
}
controller에서 적용
에러가 있다면, if문으로 검증처리
String name에 대해 비어있지 않음검증 설정 @Notempty( null 체크)
binding된 item의 결과가 에러가 있다면 => 특정페이지 연결 (+ DB에 저장되지 않음)
사용자에게 표시필요
(form:form)라이브러리 활용
@NotEmpty
Error문구
@Size(min=1, max=5)
기본 error문구 [size는 min/max를 모두 포함]
.error cssclass속성과
어노테이션 속성의 message=""로 문구지정이가능
**cf) Integer의 경우(기본값이 null인 변수형의 경우) @NotEmpty가 아닌 @NotNull을 써야함 / 또한 @Size가 아닌 @Min(value=""), @Max(value="")를 써야함
addForm
2. Validator interface를 상속받아 활용하는 방법 (설정파일)
WEB-INF 내 설정파일 생성
ver3.validation
Validator 인터페이스를 상속한 클래스를 구현하여 Controller에 DI
lombok의
@RequiredArgsConstructor
: final field와 @NonNull인 field들로만 인수로 받는 생성자 생성 (DI)
그 외의 필드는 없음
+ Controller에 추가`
root-context.xml에 Validator에 대한 메시지 설정파일 빈생성 설정 지정
** 사실 위의 예시들은 모두 server(back)단에서 처리되는 form 검증 절차이다.
**사실 server단에서 모든 client에서 오는 검증요청을 처리하는 것은 매우 비효율적
=> JavaScript로 client 단 에서 보통 먼저 처리를 하고,
네트워크를 통해오는 요청(손실이 발생할 수 있으므로)을 최종적으로 다시 검증하는 과정을 거친다.
naver예시) client 단에서 처리할 수 있게 java로 우선 처리되어 있다.