Validasi Bean: @NotNull, @Size, @Pattern
Beri anotasi pada DTO dengan batasan Bean Validation dan jalankan validasi menggunakan @Valid dalam controller.
Validasi Bean: @NotNull, @Size, @Pattern adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Apa Itu Validasi Bean?
Validasi Bean (spesifikasi Validasi Bean Jakarta 3.0) menyediakan anotasi batasan deklaratif untuk objek Java. Spring Boot secara otomatis mengonfigurasi validator dan memicunya melalui @Valid atau @Validated.
@NotNull, @NotEmpty, @NotBlank
@NotNull: nilai tidak boleh null. @NotEmpty: tidak null dan tidak kosong (untuk string/koleksi). @NotBlank: tidak null, tidak kosong, dan bukan hanya spasi putih. Utamakan @NotBlank untuk string.
public record CreateUserRequest(
@NotBlank(message = "Name is required")
String name,
@NotBlank @Email
String email,
@NotNull
UserRole role
) {}@Size dan @Length
@Size(min, max) membatasi ukuran string, koleksi, peta, dan larik. @Length (Hibernate) hanya berlaku pada string. Utamakan @Size demi portabilitas.
@Size(min = 3, max = 50, message = "Name must be 3-50 characters")
private String name;
@Size(min = 1, max = 10, message = "Cart must have 1-10 items")
private List<CartItem> items;@Min, @Max, @Positive, @Range
Batasan numerik: @Min/@Max untuk batas yang tepat, @Positive/@PositiveOrZero untuk batasan tanda, serta @DecimalMin/@DecimalMax untuk BigDecimal.
@Min(1) @Max(100)
private int quantity;
@DecimalMin("0.01") @DecimalMax("99999.99")
private BigDecimal price;
@Positive
private long orderId;@Pattern untuk Validasi Ekspresi Reguler
@Pattern(regexp) memvalidasi string terhadap ekspresi reguler. Berguna untuk nomor telepon, kode pos, dan format khusus.
@Pattern(regexp = "^\\+?[1-9]\\d{7,14}$", message = "Invalid phone number")
private String phone;
@Pattern(regexp = "^[A-Z]{2}\\d{5}$", message = "Invalid postal code (e.g. AB12345)")
private String postalCode;@Email dan @URL
@Email memvalidasi format email dasar RFC 5321. @URL (Hibernate) memvalidasi format URL. Selalu kombinasikan dengan @NotBlank karena keduanya mengizinkan nilai null.
@NotBlank @Email
private String email;
// Hibernate-specific:
@URL(protocol = "https")
private String profileUrl;@Past, @Future, @PastOrPresent
Batasan temporal memvalidasi nilai tanggal/waktu. Batasan ini berfungsi dengan LocalDate, LocalDateTime, Instant, dan banyak jenis lainnya.
@Past(message = "Birth date must be in the past")
private LocalDate birthDate;
@Future(message = "Expiry must be in the future")
private LocalDate expiryDate;Memicu Validasi dengan @Valid
Tambahkan @Valid ke parameter metode pengendali. Spring memvalidasi objek tersebut dan melempar MethodArgumentNotValidException jika gagal, lalu mengembalikan 400 Permintaan Buruk.
@PostMapping("/users")
public ResponseEntity<UserDto> create(@Valid @RequestBody CreateUserRequest req) {
User user = userService.create(req);
return ResponseEntity.status(201).body(UserDto.from(user));
}Validasi Berantai dengan @Valid pada Bidang
Untuk memvalidasi objek bertingkat, anotasi bidang tersebut dengan @Valid selain menerapkan batasan tingkat kelas.
public record OrderRequest(
@NotNull @Valid
AddressRequest shippingAddress, // validates AddressRequest constraints too
@Valid @NotEmpty
List<@Valid LineItemRequest> items
) {}Grup Validasi
Gunakan grup untuk menerapkan batasan yang berbeda dalam konteks yang berbeda (misalnya, Pembuatan vs Pembaruan). Anotasi dengan antarmuka grup dan picu dengan @Validated(CreateGroup.class).
public interface CreateGroup {}
public interface UpdateGroup {}
public record UserRequest(
@NotBlank(groups = CreateGroup.class) String password,
@NotNull(groups = UpdateGroup.class) Long id
) {}
// Controller:
@PutMapping("/{id}")
public UserDto update(@Validated(UpdateGroup.class) @RequestBody UserRequest req) { ... }Membaca Kesalahan Validasi
Tangkap MethodArgumentNotValidException dalam @ControllerAdvice untuk mengekstrak kesalahan bidang dan membangun respons kesalahan terstruktur.
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<Map<String, String>> handleValidation(MethodArgumentNotValidException ex) {
Map<String, String> errors = new LinkedHashMap<>();
ex.getBindingResult().getFieldErrors().forEach(e ->
errors.put(e.getField(), e.getDefaultMessage()));
return ResponseEntity.badRequest().body(errors);
}Pemeriksaan Singkat
Anotasi mana yang memvalidasi bahwa String tidak null DAN tidak kosong atau hanya berisi spasi?
Ringkasan
Anotasiasikan DTO dengan batasan Validasi Bean. Tambahkan @Valid dalam pengendali untuk memicu validasi. Gunakan @NotBlank untuk string, @Size untuk panjang, @Pattern untuk ekspresi reguler, serta @Past/@Future untuk tanggal. Tangani kesalahan dalam @ControllerAdvice.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Validasi Bean: @NotNull, @Size, @Pattern” gratis?
Ya — teks lengkap “Validasi Bean: @NotNull, @Size, @Pattern” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Validasi Bean: @NotNull, @Size, @Pattern”?
Beri anotasi pada DTO dengan batasan Bean Validation dan jalankan validasi menggunakan @Valid dalam controller. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.
Berapa lama pelajaran “Validasi Bean: @NotNull, @Size, @Pattern” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Validasi Bean: @NotNull, @Size, @Pattern
- Anotasi Batasan Khusus
- Penanganan Pengecualian Global dengan @ControllerAdvice
- Detail Masalah RFC 7807 dan Respons Error yang Konsisten