Java Validation Annotation'ları

Java Jan 27, 2020

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

@Annotation'ların Kullanımı
    @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.

Sonuç

Örnek olarak yazdığım Spring-Boot uygulamasının kodlarını GitHub sayfamda bulabilirsiniz. Yorumlara aklınıza takılanları yazabilirsiniz.

Keyifli kodlamalar :)
Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.