[java] Hibernate Validator에서 사용자 정의 검증 어노테이션을 만드는 방법은 무엇인가요?
  1. 검증 어노테이션 클래스 생성하기
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.*;

@Documented
@Target({ElementType.FIELD, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = CustomValidator.class)
public @interface CustomValidation {
    String message() default "Invalid value";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};
}

위의 코드에서는 @Constraint(validatedBy = CustomValidator.class) 부분에서 사용자 정의 검증을 수행할 CustomValidator 클래스를 지정합니다.

  1. 사용자 정의 검증 로직 구현하기
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class CustomValidator implements ConstraintValidator<CustomValidation, String> {
    @Override
    public void initialize(CustomValidation customValidation) {
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
        // 사용자 정의 검증 로직 수행
        // 예를 들어, value가 특정 조건을 만족하는지 검사하고 그에 따라 true 또는 false 반환
        return value != null && value.startsWith("Hello");
    }
}

위의 코드에서는 ConstraintValidator<CustomValidation, String> 인터페이스를 구현하고, isValid 메서드에서 실제 검증 로직을 구현합니다.

  1. 검증 어노테이션 사용하기
public class User {
    @CustomValidation
    private String name;

    // getter, setter 생략
}

위의 코드에서는 name 필드에 @CustomValidation 어노테이션을 사용하여 사용자 정의 검증을 수행하도록 지정합니다.

  1. Hibernate Validator를 사용하여 객체 검증하기
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import java.util.Set;

public class Main {
    public static void main(String[] args) {
        User user = new User();
        user.setName("Hello World");

        Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
        Set<ConstraintViolation<User>> violations = validator.validate(user);

        for (ConstraintViolation<User> violation : violations) {
            System.out.println(violation.getMessage());
        }
    }
}

위의 코드에서는 validator.validate(user)를 사용하여 User 객체를 검증하고, violations 변수를 통해 어노테이션의 검증 결과를 얻습니다.

이렇게 사용자 정의 검증 어노테이션을 만들고 Hibernate Validator에서 이를 활용하여 객체를 검증할 수 있습니다.

참고 자료: