DEV Community

Burak Aykan ÜRER
Burak Aykan ÜRER

Posted on

Java Validation Annotation'ları

Spring-Boot uygulamalarında modellerimizi oluştururken validasyon yapabileceğimiz kullanışlı birkaç kütüphane mevcut bu yazıda bunlardan birinden ve kullanabileceğimiz Annotation'lardan bazılarından söz edeceğim. Java Bean'lerinin doğrulanmasında standart framework olarak kullanılan JSR 380'den faydalanacağız.
Kullanıcıdan alacağımız input'lara validasyon uygulamak oldukça temel bir işlem. Bu inputlara doğrulama yapmak bize büyük kolaylık sağlayacaktır.

JSR 380

JSR 380 Bean Validasyonu için bize Java API'si sağlar. Bu versiyon Java 8 ve üzerinde kullanabileceğimiz Optional ve LocalDate'i de destekleyen Annotationlara sahiptir. JSR 380 hakkında daha fazla bilgi almak için bu adrese göz atabilirsiniz.

Dependency

Bu özellikleri kullanmak için dependency'lerinize aşağıdaki dependency'yi eklemeniz yeterli olacaktır.

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>2.0.0.Final</version>
</dependency>

Gelelim Kullanımına

Validation Annotation'ları

    @NotNull
    @NotEmpty
    private String username;

@NotNull : Bu annotation'u alan property'nin null olmamasını sağlar, property null olarak set edilmeye çalışıldığında buna engel olacaktır.

@NotEmpty : Özelliğin boş(empty) veya null olmadığını doğrular; String, Collection, Map veya Array'lere uygulanabilir.

    @NotBlank
    private String name;

@NotBlank : Yalnızca text alanlara uygulanabilir ve özelliğin null olmasını ve whitespace olmasını engeller.

    @AssertTrue
    private boolean itsTrue;

    @AssertFalse
    private boolean itsFalse;

@AssertTrue : Bu annotation'a sahip olan özelliğin true değere olduğunu doğrular.

@AssertFalse : Bu annotation'a sahip olan özelliğin false değere olduğunu doğrular.

    @Email
    private String email;

@Email : Bu annotation'a sahip olan özelliğin geçerli bir e-posta formatına sahip olduğunu doğrular.

    @Min(18)
    @Max(99)
    private int age;

@Min - @max : Bu annotationlar property'nin minimum değerden küçük, maksimum değerden büyük olmamasını sağlar.

    @Positive
    private int positive;

    @PositiveOrZero
    private int positiveOrZero;

    @Negative
    private int negative;

    @NegativeOrZero
    private double negativeOrZero;

@Positive : Nümerik değerlere uygulanabilir değerin pozitif olmasını zorunlu kılar.

@PositiveOrZero : Nümerik değerlere uygulanabilir değerin pozitif ya da sıfır olmasını zorunlu kılar.

@negative : Nümerik değerlere uygulanabilir değerin negatif olmasını zorunlu kılar.

@NegativeOrZero : Nümerik değerlere uygulanabilir değerin negatif ya da sıfır olmasını zorunlu kılar.

    @Past
    private LocalDateTime pastDate;

    @PastOrPresent
    private LocalDateTime pastOrPresentDate;

    @Future
    private LocalDateTime futureDate;

    @FutureOrPresent
    private LocalDateTime futureOrPresentDate;

@Past : Tarih alanlarına uygulanabilir değerin geçmiş bir tarih olmasını zorunlu kılar. Java 8'de gelen Tarih tiplerine de uygulanabilir.

@PastOrPresent : Tarih alanlarına uygulanabilir değerin geçmiş bir tarih ya da şimdi olmasını zorunlu kılar. Java 8'de gelen Tarih tiplerine de uygulanabilir.

@Future : Tarih alanlarına uygulanabilir değerin gelecek bir tarih olmasını zorunlu kılar. Java 8'de gelen Tarih tiplerine de uygulanabilir.

@FutureOrPresent : Tarih alanlarına uygulanabilir değerin gelecek bir tarih ya da şimdi olmasını zorunlu kılar. Java 8'de gelen Tarih tiplerine de uygulanabilir.

Annotation'lar Collection elemanlarına da uygulanabilir

List<@NotBlank String> preferences;

Annotation'lar için mesaj belirleme

    @Email(message = "Email alanı email formatına uymalıdır")
    private String email;

Annotation'un içine message set edilerek gösterilecek mesaj belirlenebilir.

Validation Mesajı

Ekler

Örnek olarak yazdığım Spring-Boot uygulamasının kodlarını GitHub sayfamda bulabilirsiniz. Bu post orijinalde blogumda yayınlanmıştır.

Top comments (1)

Collapse
 
sassineasmar profile image
Sassine El-Asmar

Wow this is very good !! Thanks for sharing