Bean Validation 2 – Custom Constraint

0 2,008

Arkadaşlar merhaba. Bean validation api’sini incelemeye devam ediyoruz. Bir önceki makalemizde konuya giriş yapmış standart anotasyonları incelemiştik. Bu yazımızda, standart anotasyonların yeterli gelmediği durumlar da nasıl kendimize özgü kısıtlar yazabiliriz ona bakacağız.
Önceki örneğimizden devam edelim. Var olan kısıtlardan birinde bir değişikliğe gidildiğini ve bizden şöyle bir kısıt eklememiz istendiğini düşünelim.

“publish alanı üzerindeki true olma validasyonunu kaldırmamız ve eğer subject A ise, publish özelliği true , diğerlerinde ise false olmalı koşulu eklememiz istensin.”

subject alanına göre publish alanını geçerlilik kontrolüne sokmamız isteniyor. Bu api ile gelen anotasyonlar ile yapabileceğimiz bir kontrol değil. Bunun için custom bir constraint yazacağız. Custom Constraint bir anotasyon ve kısıt mantığını içeren sınıftan oluşacak. Tabi bu sınıf ConstraintValidator interface’ini implemente edecek. Anotasyonu yazarak başlayalım.

İki ayrı sınıf alanına ihtiyacımız olduğundan, anotasyonumuz sınıf seviyesinde kullanılacak. Message, groups ve payload alanları zorunlu alanlardır. Groups ve payload ‘un ne olduğunu bir sonraki makalede inceleyeceğiz inşallah. Diğer alanlar bizim ihtiyacımız olan alanlardır. FieldName ve expectedFieldValue subject alanını gösterecek, diğer iki alan ise publish alanını için kullanılacak. Şimdi validator sınıfımızı oluşturalım.

ConstraintValidator interface’ine iki parametre geçtik. İlki bu sınıfın hangi anotasyonu kabul edeceğini gösteriyor ve biz bunu initialize metotunda kullanıyoruz. Bu sayede anotasyon üzerindeki değerleri alıp sınıf değişkenlerimize set ediyoruz.

İkinci parametre ise, valide edilecek olan değişkeni gösteriyor. Biz burada sınıfın kendisini bekliyoruz ve o yüzden Object olarak kullandık.

isValid metotu ile validasyon kodumuzu yazıyoruz.

Son bir iş olarak, yazdığımız anotasyon içerisine aşağıdaki satırı ekliyoruz ve böylece bu anotasyonun hangi sınıf tarafından valide edileceğini söylemiş oluyoruz.

Article sınıfımız şu şekilde değişti.

publish alanımızın eski anotasyonunu kaldırdım. Ayrıca text alanının size anotasyonunu kaldırdım. Article sınıfının üzerine yazdığımız custom constrainti ekledik.

 

 

Starter sınıfımız da şu şekilde olacak.

Çalıştırdığımızda aşağıdaki çıktıyı almış olmamız lazım.

 

Umarım faydalı olmuştur. Gayret bizden tevfik Allah’tan.

Kaynak Kod : https://github.com/volkanozdemir/validation-api-custom-constraint.git

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

 

Email adresiniz yayınlanmayacaktır.