12 Temmuz 2018 Perşembe

Bean Validation ConstraintValidator Arayüzü

Giriş
Şu satırı dahil ederiz.
import javax.validation.ConstraintValidator;
Örnek
Şöyle yaparız. İlk template tipi anotasyon ismini gösterir. İkinci tip ise isValid metoduna geçilecek tipi gösterir.
public class CityValidator implements ConstraintValidator<City, String> {
    // ...
}

public class TestClass {
    @City
    String city;
    // ...
}
Örnek
Şöyle yaparız.
public class UniqueEmailValidator implements ConstraintValidator<UniqueEmail, String> {

  private UserRepository userRepository;

  public UniqueEmailValidator(UserRepository userRepository) {

    this.userRepository = userRepository;
  }

  @Override
  public boolean isValid(String email, ConstraintValidatorContext context) {

    return !userRepository.findByEmail(email).isPresent();
  }
}
Örnek
Önce kullanacağımız anotasyonu tanımlarız. Şöyle yaparız
- @Documented ile bu anotasyonun javadoc içinde olması sağlanır.
- @Constraint ile kullanılacak validator belirtilir.
- @Target ile bu anotasyonun nerede kullanılabileceği belirtilir.
- @Retention RUNTIME yapılır
- message() metodu içinde hata mesajı belirtilir.
import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.PARAMETER;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

@Documented
@Constraint(validatedBy = CustomerIdValidator.class)
@Target({FIELD, PARAMETER})
@Retention(RUNTIME)
public @interface CustomerId {

    String message() default "Invalid Customer Id";

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

    Class<? extends Payload>[] payload() default {};
}
Daha sonra anotasyon bir POJO ile kullanılır. Şöyle yaparız
public class Person {

  @CustomerId
  private final String customerId;
  ...
}
Validator için şöyle yaparız
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class CustomerIdValidator implements ConstraintValidator<CustomerId, String> {

  @Override
  public boolean isValid(String customerId,
ConstraintValidatorContext constraintValidatorContext) {
    if(!customerId.isEmpty() && customerId.matches(Constants.CUSTOMER_ID_REGEX)) {
      log.info("Received valid customerId of type 'UUID'");
      return true;
    } else {
      log.error("Received invalid customerId");
      return false;
    }
  }
}

Hiç yorum yok:

Yorum Gönder