-
Java Bean ValidationSTUDY/백엔드 2021. 5. 7. 16:28
Bean Validation 이란?
Bean Validation은 JavaBean 유효성 검증을 위한 메타데이터 모델과 API에 대한 정의이며 여기서 언급하고 있는 JavaBean은 직렬화 가능하고 매개변수가 없는 생성자를 가지며, Getter 와 Setter Method를 사용하여 프로퍼티에 접근이 가능한 객체를 의미한다.
각 계층마다 데이터 검증 로직이 추가되면 코드 중복이 심하고, 검사 로직 추적이 어려우며 애플리케이션이 복잡해진다. 그래서 Domain Model에 @Notnull, @Min, @Max와 같은 어노테이션을 사용하여 메타데이터를 정의하고, 이를 통해 JavaBean의 유효성을 검증한다.
Bean Validation을 실제 동작하도록 구현한 Hibernate Validator를 사용한다. Hibernate Validator를 사용하기 위해서는 pom.xml에 maven을 추가해줘야한다.
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.7.Final</version>
</dependency>제약 위반 메시지에서 동적 표현을 평가하기 위해 Jakarta 표현 언어의 구현에 대한 maven 종속성을 pom.xml 파일에 추가해준다.
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.el</artifactId>
<version>3.0.0</version>
</dependency>[예시]
유효성 검증 객체
public class Person implements ValidationCheckable{
@Length(max = 4)
@NotBlank
private String name;
@NotNull
private int age;
@NotNull
private String email;
}유효성 검증 수행
public interface ValidationCheckable {
// 유효성 검사를 수행하는 Validator를 생성
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
// Validator의 validate 메소드에 검사할 객체를 전달하고,
// 그 결과를 Set<ConstraintViolation<?>> (제약조건 위반 Set)으로 받는다.
@JsonIgnore
default boolean isInvalid() {
Set<ConstraintViolation<ValidationCheckable>> violations = validator.validate(this);
return !violations.isEmpty();
}
@JsonIgnore
default String getInvalidMessage() {
Locale.setDefault(Locale.US); // locale 설정에 따라 에러 메시지가 달라진다.
Set<ConstraintViolation<ValidationCheckable>> violations = validator.validate(this);
StringBuilder message = new StringBuilder();
violations.forEach(violation -> message.append(String.format("invalid field : %s, message: %s. %n", violation.getPropertyPath(), violation.getMessage())));
return message.toString();
}
}'STUDY > 백엔드' 카테고리의 다른 글
Apache MPM (0) 2022.01.13 실제 Client IP 구하기 (0) 2021.06.25 @Transactional (0) 2021.05.07 람다 표현식 (0) 2021.05.06 Optional (0) 2021.05.06