Bean Validation 2.0 – Groups & Payload

364

Merhaba arkadaşlar. Bean validation serimizin son makalesinde groups ve payload kullanımını incelemeye çalışacağız.  Groups, validasyonları gruplamamıza yarayan özelliktir. Örneğin Article nesnemizin title değerinin benzersiz olmasını istiyoruz. Bunun içinde veritabanından bu değeri kontrol etmemiz gerekmekte. Bu işlemi custom bir constraint yazarak çözebiliriz. Bir önceki makalemizde bu konuya göz atmıştık. Burada dikkat etmemiz gereken bir konu şu ki; veritabanı sorgusu bir maliyet içermektedir. Veritabanı, dosya okuma, soket ile erişim vb işlemler maliyetlidir. Bu sebeple bu tarz maliyetli validasyonları hatasız biten standart validasyonlarının ardından yapmamız performansımızı olumlu etkileyecektir. Tam bu noktada da groups özelliği devreye girer. Kodumuzu yazarak nasıl yapacağımızı görelim.

ilk olarak article sınıfımız için groups olarak kullanılacak bir interface ekliyeceğiz. Ardından UniqueTitle isimli validasyon anotasyonu ve UniqueTitleValidator isimli validator sınıfımız oluşturacağız. Article içindeki title alanını UniqueTitle ile etiketleyeceğiz. Son olarak kodumuzu çalıştıracağız.

UniqueTitle anotasyon:

UniqueTitleValidator sınıfı:

UniqueTitle aatasyonumuza, validator sınıfımızı veriyoruz.

Article sınıfımızın son hali.

Kodumuzu çalıştıracağımız Starter sınıfı;

validator’un validate metotuna TitleDbValidator interface’imizi parametre olarak geçtik. Bunun anlamı Article sınıfında groups özelliğinde TitleDbValidator tipi olan validasyonlar çalıştırılacak. Konsole basılan çıktıya baktığımızda da sadece title validatorun çalıştığını görmüş oluruz. Bu şekilde anotasyonumuza group özelliği tanımlamış olduk. Group için tanımlamış olduğumuz interface’e erişebilir, yazdığımız default metotlar var ise çalıştırabiliriz. Şimdi payload kavramına bakalım. 

Payload validasyon hatalarımıza ekstra bilgiler eklememizi sağlar. Benim gördüğüm örneklerde (ve kendi kullanımlarımda), payload ile hatalar derecelendiriliyor. Info, Error ve benzeri şekilde. Bu durumda da donen hatalar da payload değerine göre farklı farklı işlemler yapabilme imkanımız olur. Ayrıca payload için tanımladığımız interface’in metotlarını çalıştırabiliriz. Hem group hem de payload bize validasyon hataları ile ilgili oldukça fazla esneklik sağlar.

Payload interface’lerimizi yapalım.

Article içindeki @UniqueTitle anotasyonumuza payload bilgisi verelim.

Son olarak Starter sınıfımızdaki değişliği yapalım.

Çalıştırdığımızda aşağıdaki sonucu almalıyız.

Group ve payload kavramlarını inceledik. Umarım faydalı olmuştur. Gayret bizden Tevfik Allah’tan.

Kaynak : https://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/?v=6.0#validator-gettingstarted

Kaynak Kod : https://github.com/volkanozdemir/validation-api-grouo-payload.git

 

Yorum yaz

Email adresiniz yayınlanmayacaktır.