Pendahuluan ?


Javax Validation adalah bagian dari Java Bean Validation API yang memberikan cara standar untuk melakukan validasi data pada aplikasi berbasis Java.

Dengan pendekatan berbasis anotasi, library ini mempermudah proses validasi tanpa perlu menulis kode tambahan yang berulang.


Apa Itu Javax Validation ?


Javax Validation adalah API validasi bawaan Java yang diperkenalkan pertama kali dalam JSR 303 (Java Specification Request).

API ini menyediakan:

  • Sistem Validasi Deklaratif - Dengan menggunakan anotasi seperti @NotNull, @Size, atau @Pattern, validasi dapat ditulis langsung pada model data.
  • Integrasi dengan Framework - Banyak framework seperti Hibernate, Spring, atau Jakarta EE mendukung javax.validation secara bawaan.
  • Ekstensibilitas - Pengembang dapat membuat anotasi khusus (custom annotation) untuk validasi yang lebih kompleks. Dengan javax.validation, validasi data menjadi lebih mudah dan terstruktur, mengurangi potensi kesalahan manual.

Cara Kerja Javax Validation


1. Komponen Utama
  • Constraint: Aturan validasi yang diterapkan pada elemen data, seperti @NotNull atau @Email.
  • Validator: Objek yang memeriksa apakah data memenuhi constraint yang ditentukan.
  • Validation Framework: Library implementasi seperti Hibernate Validator yang mengimplementasikan Javax Validation API.

2. Alur Validasi
  • Anotasi validasi diterapkan pada properti atau metode.
  • Validator memeriksa data berdasarkan constraint yang ditentukan.

Jika ada pelanggaran validasi, ValidationException atau daftar pesan kesalahan dikembalikan.


Contoh Implementasi



1. Model dengan Anotasi Validasi
import jakarta.validation.constraints.*;

public class User {
    @NotNull(message = "Username tidak boleh null")
    @Size(min = 5, max = 15, message = "Username harus antara 5 hingga 15 karakter")
    private String username;

    @Email(message = "Email tidak valid")
    private String email;

    @Min(value = 18, message = "Usia minimal adalah 18 tahun")
    private int age;

    // Getter dan Setter
}

2. Validasi dengan Validator
import jakarta.validation.*;
import java.util.Set;

public class ValidatorExample {
    public static void main(String[] args) {
        User user = new User();
        user.setUsername("abc"); // Tidak valid
        user.setEmail("invalid-email"); // Tidak valid
        user.setAge(15); // Tidak valid

        ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        Validator validator = factory.getValidator();

        Set<ConstraintViolation<User>> violations = validator.validate(user);
        for (ConstraintViolation<User> violation : violations) {
            System.out.println(violation.getMessage());
        }
    }
}

Output:

Username harus antara 5 hingga 15 karakter  
Email tidak valid  
Usia minimal adalah 18 tahun  

Manfaat Javax Validation


  • Deklaratif dan Mudah Dibaca –> Dengan anotasi, validasi langsung terlihat di level model, meningkatkan keterbacaan dan efisiensi.
  • Pengurangan Kode Boilerplate –> Tidak perlu menulis kode validasi secara manual untuk setiap atribut.
  • Portabilitas –> Library ini adalah standar Java dan didukung oleh berbagai framework dan server aplikasi.
  • Custom Validation –> Anotasi validasi dapat diperluas untuk mendukung aturan bisnis yang spesifik.
  • Integrasi yang kuat –> Sangat cocok dengan framework seperti Spring Boot untuk validasi input di REST API.

Anotasi Validasi Kustom


Jika anotasi bawaan tidak cukup, kita dapat membuat anotasi sendiri.

1. Definisi Anotasi

import jakarta.validation.Constraint;
import jakarta.validation.Payload;
import java.lang.annotation.*;

@Documented
@Constraint(validatedBy = PasswordValidator.class)
@Target({ ElementType.METHOD, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
public @interface ValidPassword {
    String message() default "Password tidak valid";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};
}

2. Implementasi Validator

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

public class PasswordValidator implements ConstraintValidator<ValidPassword, String> {
    @Override
    public boolean isValid(String password, ConstraintValidatorContext context) {
        return password != null && password.length() >= 8 && password.matches(".*\\d.*");
    }
}

3. Penggunaan

Salin kode
public class Account {
    @ValidPassword
    private String password;
}

Kapan Menggunakan Javax Validation?


Javax Validation sangat cocok untuk skenario berikut:

  • Validasi Input Pengguna: Digunakan untuk memvalidasi data dari form atau API.
  • Validasi pada Layer Model: Pastikan semua data yang masuk ke sistem sesuai aturan bisnis.
  • Integrasi dengan Framework: Menggunakan javax.validation untuk validasi otomatis di aplikasi berbasis Spring atau Jakarta EE.

Namun, untuk kasus validasi lintas data (misalnya membandingkan dua atribut), anotasi kustom atau pendekatan manual mungkin lebih cocok.