0Pricing
Java Academy · Ders

Özel Kısıtlama Ek Açıklamaları

ConstraintValidator uygulamasıyla özel bir @UniqueEmail ek açıklaması oluşturun.

Özel Kısıtlama Ek Açıklamaları, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.

Standart Kısıtlar Yeterli Olmadığında

Standart Bileşen doğrulaması anotasyonları yaygın durumları kapsar. Alanınıza özgü kurallar için (örneğin, benzersiz e-posta, geçerli IBAN veya parola gücü) özel kısıt anotasyonları oluşturun.

Kısıt Anotasyonunu Tanımlama

@Constraint(validatedBy = ...) içeren bir anotasyon oluşturun; gerekli mesaj, grup ve yük öğelerini ve uygun saklama süresi/hedef bilgilerini tanımlayın.

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
@Documented
@Constraint(validatedBy = UniqueEmailValidator.class)
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface UniqueEmail {
    String message() default "Email already registered";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

ConstraintValidator Uygulama

ConstraintValidator<UniqueEmail, String> uygulayın. Başlatma yöntemi anotasyon öğelerini okur; isValid asıl denetimi gerçekleştirir.

@Component
public class UniqueEmailValidator implements ConstraintValidator<UniqueEmail, String> {
    @Autowired private UserRepository repo;
    @Override
    public boolean isValid(String email, ConstraintValidatorContext ctx) {
        if (email == null) return true; // let @NotBlank handle null
        return !repo.existsByEmail(email);
    }
}

Özel Kısıtı Kullanma

Anotasyonu bir alan, parametre veya dönüş değeri üzerinde herhangi bir standart kısıt gibi uygulayın.

public record CreateUserRequest(
    @NotBlank
    String name,
    @NotBlank @Email @UniqueEmail
    String email
) {}

Enterpolasyonla Özel Mesaj

Mesajda anotasyon öğelerine {elementName} kullanarak başvurun. Dinamik veriler içeren özel mesajlar eklemek için ctx.buildConstraintViolationWithTemplate() kullanın.

@Constraint(validatedBy = RangeValidator.class)
public @interface InRange {
    int min() default 0;
    int max() default 100;
    String message() default "Must be between {min} and {max}";
    // ...
}

Sınıf Düzeyinde Kısıt

Birden çok alanı birlikte doğrulamak için kısıtı sınıf düzeyinde uygulayın; bu, parola doğrulaması gibi alanlar arası kurallar için kullanışlıdır.

@Documented
@Constraint(validatedBy = PasswordMatchValidator.class)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface PasswordMatch {
    String message() default "Passwords do not match";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Sınıf Düzeyinde Doğrulayıcı Uygulaması

Doğrulayıcı bütün nesneyi alır. Alanlar arası doğrulama yapmak için birden çok alana erişin.

public class PasswordMatchValidator implements ConstraintValidator<PasswordMatch, ChangePasswordRequest> {
    public boolean isValid(ChangePasswordRequest req, ConstraintValidatorContext ctx) {
        if (req.getNewPassword() == null) return true;
        boolean match = req.getNewPassword().equals(req.getConfirmPassword());
        if (!match) {
            ctx.disableDefaultConstraintViolation();
            ctx.buildConstraintViolationWithTemplate("Passwords do not match")
               .addPropertyNode("confirmPassword").addConstraintViolation();
        }
        return match;
    }
}

Kısıtları Birleştirme

Özel anotasyonunuzu mevcut kısıtlarla işaretleyerek bir meta-kısıt oluşturun. Her ikisi de otomatik olarak uygulanır.

@NotBlank
@Email
@Size(max = 255)
@Constraint(validatedBy = {})
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidEmail {
    String message() default "Invalid email";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

Birden Çok İhlal Döndürme

Tek bir doğrulayıcı geçişinde bulunan her sorun için ayrı ihlal mesajları eklemek üzere ctx.disableDefaultConstraintViolation() kullanın.

public boolean isValid(String password, ConstraintValidatorContext ctx) {
    List<String> issues = new ArrayList<>();
    if (password.length() < 8) issues.add("Too short");
    if (!password.matches(".*\\d.*")) issues.add("Must contain a digit");
    if (issues.isEmpty()) return true;
    ctx.disableDefaultConstraintViolation();
    issues.forEach(msg -> ctx.buildConstraintViolationWithTemplate(msg).addConstraintViolation());
    return false;
}

Spring Tarafından Yönetilen Doğrulayıcılar

UniqueEmailValidator, @Component ile işaretlendiği için Spring, veri depolarını buna ekler. Bu yalnızca doğrulayıcı Spring üzerinden başlatılırsa çalışır; Spring Boot bunu otomatik olarak yapılandırır.

Özel Doğrulayıcıları Birim Testine Tabi Tutma

Doğrulayıcıları doğrudan birim testine tabi tutun; saf doğrulama mantığı için Spring bağlamı gerekmez. Bütünleştirme testleri için Validation.buildDefaultValidatorFactory() kullanın.

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
CreateUserRequest req = new CreateUserRequest("", "bad-email", null);
Set<ConstraintViolation<CreateUserRequest>> violations = validator.validate(req);
System.out.println(violations.size()); // 3

Kısa Kontrol

Özel bir kısıt doğrulayıcısı hangi arayüzü uygular?

Özet

@Constraint(validatedBy=...) içeren bir @interface oluşturun. ConstraintValidator uygulayın. Spring bağımlılık eklemesi için @Component kullanın. Sınıf düzeyindeki kısıtlar birden çok alanı birlikte doğrular. Yinelenen tanımları önlemek için mevcut kısıtları birleştirin.

Sıkça Sorulan Sorular

“Özel Kısıtlama Ek Açıklamaları” dersi ücretsiz mi?

Evet — “Özel Kısıtlama Ek Açıklamaları” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.

“Özel Kısıtlama Ek Açıklamaları” dersinde ne öğreneceğim?

ConstraintValidator uygulamasıyla özel bir @UniqueEmail ek açıklaması oluşturun. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Java Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Özel Kısıtlama Ek Açıklamaları” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Bean Doğrulaması: @NotNull, @Size, @Pattern
  2. Özel Kısıtlama Ek Açıklamaları
  3. @ControllerAdvice ile Genel İstisna Yönetimi
  4. RFC 7807 Problem Ayrıntıları ve Tutarlı Hata Yanıtları
← Java Academy Sayfasına Dön