[java] Hibernate Validator를 사용하여 객체 그래프 유효성 검사를 수행할 수 있나요? 가능하다면 어떻게 구현하는 건가요?
객체 그래프 유효성 검사를 구현하기 위해 다음의 단계를 따를 수 있습니다:
-
javax.validation
패키지에서 제공하는 어노테이션들을 사용하여 각 객체의 유효성 규칙을 정의합니다. 예를 들어,@NotNull
,@Size
,@Pattern
등의 어노테이션을 사용하여 필드의 null 체크, 길이 체크, 패턴 매칭 등의 유효성 검사 규칙을 정의할 수 있습니다. -
객체 그래프 내에서 유효성 검사를 수행할 클래스에
@Valid
어노테이션을 추가합니다. 이 어노테이션은 해당 클래스 내부의 객체 그래프를 유효성 검사 대상으로 지정합니다. -
유효성 검사를 수행할 때
Validator
인터페이스를 사용합니다.ValidatorFactory
를 이용하여Validator
객체를 생성한 후,validate()
메서드를 호출하여 객체 그래프를 검사합니다. 유효하지 않은 경우,ConstraintViolation
객체를 통해 오류 정보를 확인할 수 있습니다.
아래는 Hibernate Validator를 사용하여 객체 그래프 유효성 검사를 수행하는 예제 코드입니다:
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
public class Main {
public static void main(String[] args) {
// Validator 팩토리 생성
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
// 객체 그래프 생성
User user = new User("John", 25, null);
// 유효성 검사 수행
Set<ConstraintViolation<User>> violations = validator.validate(user);
for (ConstraintViolation<User> violation : violations) {
System.out.println(violation.getPropertyPath() + ": " + violation.getMessage());
}
}
}
class User {
@NotNull
private String name;
@Min(18)
private int age;
@Valid
private Address address;
// 생성자, Getter/Setter 등 생략
}
class Address {
@NotBlank
private String city;
@NotBlank
private String street;
// 생성자, Getter/Setter 등 생략
}
위의 예제에서는 User
클래스와 Address
클래스의 유효성을 검사하고 있습니다. User
클래스의 address
필드에는 @Valid
어노테이션을 추가하여 해당 객체 그래프를 유효성 검사 대상으로 설정하였습니다.
유효성 검사를 수행한 후, Set<ConstraintViolation<User>>
객체에 저장된 오류 정보를 출력하는 예제입니다.