[java] Hibernate Validator를 사용하여 크로스 필드 유효성 검사를 수행하는 방법은 무엇인가요?
  1. 의존성 추가: 먼저, 프로젝트의 의존성에 Hibernate Validator를 추가해야 합니다. Maven을 사용하는 경우 pom.xml 파일에 다음 의존성을 추가합니다:
<dependencies>
    <dependency>
        <groupId>org.hibernate.validator</groupId>
        <artifactId>hibernate-validator</artifactId>
        <version>6.0.16.Final</version>
    </dependency>
</dependencies>
  1. 유효성 검사 어노테이션 사용: 유효성 검사를 수행할 필드에 어노테이션을 사용합니다. 크로스 필드 유효성 검사를 수행하기 위해 @ScriptAssert 어노테이션을 사용할 수 있습니다. 다음은 사용자의 비밀번호와 비밀번호 확인 필드 간의 일치 여부를 검사하는 예시입니다:
public class User {
    private String password;
    private String confirmPassword;

    // Getters and setters

    @ScriptAssert(lang = "javascript", script = "_this.password.equals(_this.confirmPassword)", message = "Passwords do not match")
    public boolean isPasswordsMatching() {
        return password != null && password.equals(confirmPassword);
    }
}

여기서 isPasswordsMatching 메소드는 크로스 필드 유효성 검사를 수행하는 메소드로 작성됩니다. lang 속성은 사용할 스크립트 언어를 지정하고, script 속성은 유효성 검사에 사용될 스크립트를 작성합니다.

  1. 유효성 검사 실행: 유효성 검사를 실행하기 위해 Validator를 사용합니다. 다음은 유효성 검사를 수행하는 예시입니다:
public class Main {
    public static void main(String[] args) {
        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        User user = new User();
        user.setPassword("password");
        user.setConfirmPassword("passwrd");

        Set<ConstraintViolation<User>> violations = validator.validate(user);

        for (ConstraintViolation<User> violation : violations) {
            System.out.println(violation.getMessage()); // 출력: "Passwords do not match"
        }
    }
}

위 코드에서 ValidatorFactoryValidator 클래스는 Hibernate Validator에서 제공하는 클래스로, 유효성 검사를 수행하는 데 사용됩니다. validate 메소드는 인스턴스를 전달하여 유효성 검사를 수행하고, 유효성 검사 결과를 ConstraintViolation 객체의 Set으로 반환합니다.

이렇게 하면 Hibernate Validator를 사용하여 크로스 필드 유효성 검사를 수행할 수 있습니다.

참고 문서: Hibernate Validator Reference Guide