Validation işlemine bir önceki form validation yazısında anlatıldığı şekilde başla.
Custom validation kullanarak bir dropdown’ın bağlı olduğu alanın değer içerip içermediğini kontrol edebilirsin ya da örneğin personel numarası tuttuğun bir alan olsun; bu alanın unique olmasını istiyorsun. Ona göre bir uniquePersonalNoValidation tanımı yapabilirsin.
ManyToOne ilişkisi olan bir entity field için custom validation tanımlama işlemi;
- html içinde dropdown default değeri 0 olsun.
- Validator sınıfını tanımla.

- Validation arayüzünü tanımla.

- Entity için validation annotation’ı tanımla. (@StudentValidation)
- spring-boot-starter-validation dependency kullan.
Buraya kadar anlatılanlar normal bir entity için (ve onunla ilişkide olan küçük sınıflar için -durum vb.- ) validation işleminin nasıl yapıldığıyla ilgiliydi. Bundan sonrası biraz daha daha karmaşık ve özel durumlar için geçerli. Bir kullanıcının sisteme eklenmesi sürecinde User varlığını ve List<Role> listesini içeren bir modelin form nesnesi olarak eklendiğini düşünelim. Burada User sınıfında değişkenler için tanımlı NotEmpty vb. annotationlar olabilir fakat form üzerinde kaydedilmeye çalışılan model bu annotationları farketmez. Bunun yerine User’a özel bir validator tanımlamamız lazımdır. Entity User yerine durum vb. bir sınıf olsaydı burada basitçe ConstraintValidator implement eden bir validation sınıfı oluşturur ve tek uyarıyla durumu çözerdik ancak User gibi büyük sınıflarda bu işlem için org.springframework.validation.Validator; arayüzünü implement eden bir UserValidator kullanılır. UserValidator içindeki validate methodu içinde validation işlemi yapılır. Burada işin püf noktası, eğer User sınıfı başka bir sınıfla ilişkili olarak bu form içindeyse örneğin ValidationUtils.rejectIfEmptyOrWhitespace(errors, “user.email”, “NotEmptyEmail”); ifadesi kullanılır. Ancak öyle bir senaryo olsun ki burada doğrudan User sınıfından oluşturulmuş bir model post edilmeye çalışılsın. Bu senaryoda da ValidationUtils.rejectIfEmptyOrWhitespace(errors, “email”, “NotEmptyEmail”); kullanılmalıdır. Bu şekilde bir validator kullanılırken bu “email” alanının kullanımına dikkat etmek önemli. Post methodu içinde bu validatorün kullanımı şu şekildedir : userValidator.validate(user, bindingResult); . Burada problem olması durumunda doğrudan bindingResult errors içine eklenecektir.