Doğrulanmış, Geçerli, Doğrulayıcı: Aralarındaki Farkı Bilin
İlgili Etiketler:1. Alibaba Cloud Kripto Anahtar Güvenliği için FIPS Doğrulanmış HSM Sunuyor
2. Alan adı geçerliliği
Doğrulanmış, Geçerli, Doğrulayıcı: Aralarındaki farkı bilin
1. Sonuç önce gelir
Geçerli ve Doğrulanmış Arasındaki Benzerlikler
•Her iki yöntem ve parametre de doğrulanabilir
•@Valid ve @Validated: Her iki ek açıklama da standart bean doğrulamasının uygulanmasına neden olur.
Doğrulama başarısız olursa bir BindException fırlatılır ve 400 (BAD_REQUEST) yanıtı döndürülür; veya doğrulama hataları denetleyicide Errors veya BindingResult parametreleri aracılığıyla yerel olarak işlenebilir. Ayrıca, parametreden önce @RequestBody ek açıklaması varsa doğrulama hatası MethodArgumentNotValidException istisnası fırlatır.
JSR 380
JSR 380, bean doğrulaması için Java API spesifikasyonudur ve Jakarta EE ile JavaSE'nin bir parçasıdır. Bu, @NotNull, @Min ve @Max gibi ek açıklamalar kullanılarak bean özelliklerinin belirli koşulları karşılamasını sağlar.
Bu sürüm Java 8 veya sonraki bir sürümü gerektirir ve tip ek açıklamaları ile Optional ve LocalDate gibi yeni tipler için destek gibi Java 8'de eklenen yeni özelliklerden yararlanır.
Spesifikasyon hakkında eksiksiz bilgi için JSR 380 okumaya devam edin.
javax.validation.Valid _
oJSR-303 spesifikasyonu standart ek açıklama desteğidir, bir işaretleme ek açıklamasıdır.
oEk açıklama ElementType#METHOD, ElementType#FIELD, ElementType#CONSTRUCTOR,
oElementType#PARAMETER, ElementType#TYPE_USE destekler
•org.springframework.validation.annotation.Validated _
oSpring tarafından yapılan, gruplama işlevini geliştiren özel bir ek açıklamadır.
oEk açıklama ElementType#TYPE, ElementType#METHOD, ElementType#PARAMETER destekler
@Valid ve @Validated arasındaki fark
Bean Validation 2.0 (JSR 380), varlık ve yöntem doğrulaması için bir üstveri modeli ve API tanımlar; Hibernate Validator şu anda en iyi uygulamadır
Validator arayüzü, tüm varlığı veya yalnızca varlığın tek bir özelliğini doğrulamak için kullanılabilecek üç yönteme sahiptir
•Validator#validate() tüm bean'lerdeki tüm kısıtlamaları doğrular
•Validator#validateProperty() tek bir özelliği doğrular
•Validator#validateValue() verilen bir sınıfın tek bir özelliğinin başarıyla doğrulanıp doğrulanamayacağını kontrol eder
İster requestBody parametre doğrulaması ister yöntem düzeyinde doğrulama olsun, nihayetinde doğrulamayı gerçekleştirmek için Hibernate Validator çağrılır; Spring Validation yalnızca bir kapsülleme katmanı sağlar.
Kullanıcı girdisini doğrulamak çoğu uygulamamızda yaygın bir özelliktir. Java ekosisteminde bunu desteklemek için münhasıran Java Standard Bean Validation API'sini kullanırız. Ayrıca 4.0 sürümünden itibaren bu, Spring ile de iyi entegre edilmiştir.
Sonraki bölümlerde bunları ayrıntılı olarak inceleyelim.
@Valid ve @Validated ek açıklamaları
Spring'de yöntem düzeyinde doğrulama için JSR-303'ün @Valid ek açıklamasını kullanırız. Ayrıca üye özelliklerini doğrulama için işaretlemek amacıyla da kullanırız. Ancak bu ek açıklama grup doğrulamayı desteklemez.
Gruplar, doğrulama sırasında uygulanan kısıtlamaları sınırlamaya yardımcı olur. Özel bir kullanım durumu UI sihirbazlarıdır. Burada ilk adımda bazı alan alt gruplarımız olabilir. Sonraki adımlarda aynı bean'e ait başka bir grup olabilir. Dolayısıyla her adımda bu sınırlı alanlara kısıtlamalar uygulamamız gerekir, ancak @Valid bunu desteklemez.
Bu durumda, grup düzeyi için JSR-303'ün @Valid'inin bir türevi olan Spring'in @Validated'ini kullanmamız gerekir. Bu, yöntem düzeyinde kullanılır. İşaretleme üye özellikleri için @Valid ek açıklamasını kullanmaya devam ederiz.
Şimdi hemen başlayalım ve bu ek açıklamaların kullanımını bir örnekle görelim.

Spring Boot ile geliştirilen basit bir kullanıcı kaydını ele alalım. İlk olarak yalnızca ad ve parola özelliklerine sahip olacağız:
Testin başarıyla çalıştığını onayladıktan sonra işlevselliği genişletiyoruz. Bir sonraki mantıklı adım bunu karmaşık kullanıcı kaydına dönüştürmektir. İlk adım için ad ve parola aynı kalır. İkinci adımda yaş ve telefon gibi ek bilgiler alacağız. Bu nedenle etki alanı nesnemizi bu ek alanlarla güncelleyeceğiz:
Ancak bu kez önceki testin başarısız olduğunu fark edeceğiz. Bunun nedeni yaş ve telefon alanlarını iletmememizdir. Bu davranışı desteklemek için grup doğrulamaya ve @Validated ek açıklamasına ihtiyacımız var.
Bunu yapmak için alanları gruplandırarak iki farklı grup oluşturmamız gerekir. Öncelikle iki işaretleyici arayüz oluşturmamız gerekiyor. Her grup veya her adım için ayrı ayrı. Nasıl uygulandığını görmek için grup doğrulama hakkındaki makalemize başvurabilirsiniz. Burada ek açıklamalardaki farklılıklara odaklanalım.
İlk adım için BasicInfo arayüzüne ve ikinci adım için AdvanceInfo arayüzüne sahip olacağız. Ayrıca UserAccount sınıfını bu işaretleyici arayüzleri aşağıdaki şekilde kullanacak biçimde güncelleyeceğiz:
Ardından @Valid'in iç içe geçmiş özelliklerin doğrulamasını nasıl tetiklediğini görelim.
@Valid ek açıklaması iç içe geçmiş özellikleri doğrulamak için kullanılır. Bu, iç içe geçmiş nesnelerin doğrulamasını tetikler. Örneğin mevcut senaryomuzda bir UserAddress Nesnesi oluşturalım:
5. @Valid ve @Validated'i birleştirerek küme kontrolü gerçekleştirme
İstek gövdesi arka uca doğrudan bir json dizisi iletiyorsa ve dizideki her öğe üzerinde parametre doğrulaması yapmak istiyorsanız, bu noktada verileri almak için doğrudan java.util.Collection altındaki list veya set kullanırsak parametre doğrulaması etkili olmaz! Parametreleri almak için özel bir liste koleksiyonu kullanabiliriz:
•List tipini sarmalayın ve @Valid ek açıklamasını bildirin
package com.devicemag.core.BO;
import javax.validation.Valid ; _
import java.util .*;
Doğrulanmış, Geçerli, Doğrulayıcı Sonuç
Doğrulanmış, Geçerli, Doğrulayıcı. Sonuç olarak, herhangi bir temel doğrulama için yöntem çağrısında JSR @Valid ek açıklamasını kullanacağız. Öte yandan, grup dizileri de dahil olmak üzere herhangi bir grup doğrulaması için yöntem çağrılarımızda Spring'in @Validated ek açıklamasını kullanmamız gerekir. İç içe geçmiş özelliklerin doğrulamasını tetiklemek için de @Valid ek açıklaması gereklidir.
Doğrulanmış hala AOP'dir. Yöntem doğrulamasında AOP dinamik engelleme yöntemi kullanılır ve doğrulamayı tamamlamak için JSR303 Validator kullanılır. Bean'in özellik doğrulamasında ise Bean yaşam döngüsüne dayanır ve doğrulama başlatılmadan önce ve sonra tamamlanır.
2. Alan adı geçerliliği
Doğrulanmış, Geçerli, Doğrulayıcı: Aralarındaki farkı bilin
1. Sonuç önce gelir
Geçerli ve Doğrulanmış Arasındaki Benzerlikler
•Her iki yöntem ve parametre de doğrulanabilir
•@Valid ve @Validated: Her iki ek açıklama da standart bean doğrulamasının uygulanmasına neden olur.
Doğrulama başarısız olursa bir BindException fırlatılır ve 400 (BAD_REQUEST) yanıtı döndürülür; veya doğrulama hataları denetleyicide Errors veya BindingResult parametreleri aracılığıyla yerel olarak işlenebilir. Ayrıca, parametreden önce @RequestBody ek açıklaması varsa doğrulama hatası MethodArgumentNotValidException istisnası fırlatır.
JSR 380
JSR 380, bean doğrulaması için Java API spesifikasyonudur ve Jakarta EE ile JavaSE'nin bir parçasıdır. Bu, @NotNull, @Min ve @Max gibi ek açıklamalar kullanılarak bean özelliklerinin belirli koşulları karşılamasını sağlar.
Bu sürüm Java 8 veya sonraki bir sürümü gerektirir ve tip ek açıklamaları ile Optional ve LocalDate gibi yeni tipler için destek gibi Java 8'de eklenen yeni özelliklerden yararlanır.
Spesifikasyon hakkında eksiksiz bilgi için JSR 380 okumaya devam edin.
Geçerli ile Doğrulanmış arasındaki fark nedir?
javax.validation.Valid _
oJSR-303 spesifikasyonu standart ek açıklama desteğidir, bir işaretleme ek açıklamasıdır.
oEk açıklama ElementType#METHOD, ElementType#FIELD, ElementType#CONSTRUCTOR,
oElementType#PARAMETER, ElementType#TYPE_USE destekler
•org.springframework.validation.annotation.Validated _
oSpring tarafından yapılan, gruplama işlevini geliştiren özel bir ek açıklamadır.
oEk açıklama ElementType#TYPE, ElementType#METHOD, ElementType#PARAMETER destekler
@Valid ve @Validated arasındaki fark
Doğrulanmış, Geçerli, Doğrulayıcı.Doğrulayıcı
Bean Validation 2.0 (JSR 380), varlık ve yöntem doğrulaması için bir üstveri modeli ve API tanımlar; Hibernate Validator şu anda en iyi uygulamadır
Validator arayüzü, tüm varlığı veya yalnızca varlığın tek bir özelliğini doğrulamak için kullanılabilecek üç yönteme sahiptir
•Validator#validate() tüm bean'lerdeki tüm kısıtlamaları doğrular
•Validator#validateProperty() tek bir özelliği doğrular
•Validator#validateValue() verilen bir sınıfın tek bir özelliğinin başarıyla doğrulanıp doğrulanamayacağını kontrol eder
İster requestBody parametre doğrulaması ister yöntem düzeyinde doğrulama olsun, nihayetinde doğrulamayı gerçekleştirmek için Hibernate Validator çağrılır; Spring Validation yalnızca bir kapsülleme katmanı sağlar.
Kullanıcı girdisini doğrulamak çoğu uygulamamızda yaygın bir özelliktir. Java ekosisteminde bunu desteklemek için münhasıran Java Standard Bean Validation API'sini kullanırız. Ayrıca 4.0 sürümünden itibaren bu, Spring ile de iyi entegre edilmiştir.
Sonraki bölümlerde bunları ayrıntılı olarak inceleyelim.
@Valid ve @Validated ek açıklamaları
Spring'de yöntem düzeyinde doğrulama için JSR-303'ün @Valid ek açıklamasını kullanırız. Ayrıca üye özelliklerini doğrulama için işaretlemek amacıyla da kullanırız. Ancak bu ek açıklama grup doğrulamayı desteklemez.
Gruplar, doğrulama sırasında uygulanan kısıtlamaları sınırlamaya yardımcı olur. Özel bir kullanım durumu UI sihirbazlarıdır. Burada ilk adımda bazı alan alt gruplarımız olabilir. Sonraki adımlarda aynı bean'e ait başka bir grup olabilir. Dolayısıyla her adımda bu sınırlı alanlara kısıtlamalar uygulamamız gerekir, ancak @Valid bunu desteklemez.
Bu durumda, grup düzeyi için JSR-303'ün @Valid'inin bir türevi olan Spring'in @Validated'ini kullanmamız gerekir. Bu, yöntem düzeyinde kullanılır. İşaretleme üye özellikleri için @Valid ek açıklamasını kullanmaya devam ederiz.
Şimdi hemen başlayalım ve bu ek açıklamaların kullanımını bir örnekle görelim.

3. Örnekler
Spring Boot ile geliştirilen basit bir kullanıcı kaydını ele alalım. İlk olarak yalnızca ad ve parola özelliklerine sahip olacağız:
Testin başarıyla çalıştığını onayladıktan sonra işlevselliği genişletiyoruz. Bir sonraki mantıklı adım bunu karmaşık kullanıcı kaydına dönüştürmektir. İlk adım için ad ve parola aynı kalır. İkinci adımda yaş ve telefon gibi ek bilgiler alacağız. Bu nedenle etki alanı nesnemizi bu ek alanlarla güncelleyeceğiz:
Ancak bu kez önceki testin başarısız olduğunu fark edeceğiz. Bunun nedeni yaş ve telefon alanlarını iletmememizdir. Bu davranışı desteklemek için grup doğrulamaya ve @Validated ek açıklamasına ihtiyacımız var.
Bunu yapmak için alanları gruplandırarak iki farklı grup oluşturmamız gerekir. Öncelikle iki işaretleyici arayüz oluşturmamız gerekiyor. Her grup veya her adım için ayrı ayrı. Nasıl uygulandığını görmek için grup doğrulama hakkındaki makalemize başvurabilirsiniz. Burada ek açıklamalardaki farklılıklara odaklanalım.
İlk adım için BasicInfo arayüzüne ve ikinci adım için AdvanceInfo arayüzüne sahip olacağız. Ayrıca UserAccount sınıfını bu işaretleyici arayüzleri aşağıdaki şekilde kullanacak biçimde güncelleyeceğiz:
Ardından @Valid'in iç içe geçmiş özelliklerin doğrulamasını nasıl tetiklediğini görelim.
Doğrulanmış, Geçerli, Doğrulayıcı.@Valid İç İçe Doğrulamayı Kullanma
@Valid ek açıklaması iç içe geçmiş özellikleri doğrulamak için kullanılır. Bu, iç içe geçmiş nesnelerin doğrulamasını tetikler. Örneğin mevcut senaryomuzda bir UserAddress Nesnesi oluşturalım:
5. @Valid ve @Validated'i birleştirerek küme kontrolü gerçekleştirme
İstek gövdesi arka uca doğrudan bir json dizisi iletiyorsa ve dizideki her öğe üzerinde parametre doğrulaması yapmak istiyorsanız, bu noktada verileri almak için doğrudan java.util.Collection altındaki list veya set kullanırsak parametre doğrulaması etkili olmaz! Parametreleri almak için özel bir liste koleksiyonu kullanabiliriz:
•List tipini sarmalayın ve @Valid ek açıklamasını bildirin
package com.devicemag.core.BO;
import javax.validation.Valid ; _
import java.util .*;
Doğrulanmış, Geçerli, Doğrulayıcı Sonuç
Doğrulanmış, Geçerli, Doğrulayıcı. Sonuç olarak, herhangi bir temel doğrulama için yöntem çağrısında JSR @Valid ek açıklamasını kullanacağız. Öte yandan, grup dizileri de dahil olmak üzere herhangi bir grup doğrulaması için yöntem çağrılarımızda Spring'in @Validated ek açıklamasını kullanmamız gerekir. İç içe geçmiş özelliklerin doğrulamasını tetiklemek için de @Valid ek açıklaması gereklidir.
Doğrulanmış hala AOP'dir. Yöntem doğrulamasında AOP dinamik engelleme yöntemi kullanılır ve doğrulamayı tamamlamak için JSR303 Validator kullanılır. Bean'in özellik doğrulamasında ise Bean yaşam döngüsüne dayanır ve doğrulama başlatılmadan önce ve sonra tamamlanır.
