Pengesahan Bean: @NotNull, @Size, @Pattern
Anotasikan DTO dengan kekangan Bean Validation dan cetuskan pengesahan dengan @Valid dalam pengawal.
Pengesahan Bean: @NotNull, @Size, @Pattern ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah Itu Bean Validation?
Pengesahan Bean (Jakarta Bean Validation 3.0) menyediakan anotasi kekangan deklaratif untuk bean Java. Spring Boot mengkonfigurasi pengesah secara automatik dan mencetuskannya melalui @Valid atau @Validated.
@NotNull, @NotEmpty, @NotBlank
@NotNull: nilai mestilah bukan null. @NotEmpty: bukan null dan tidak kosong (rentetan/koleksi). @NotBlank: bukan null, tidak kosong dan bukan hanya ruang kosong. Utamakan @NotBlank untuk rentetan.
public record CreateUserRequest(
@NotBlank(message = "Name is required")
String name,
@NotBlank @Email
String email,
@NotNull
UserRole role
) {}@Size dan @Length
@Size(min, max) mengehadkan saiz rentetan, koleksi, peta dan tatasusunan. @Length (Hibernate) hanya berfungsi pada rentetan. Utamakan @Size untuk keboleh alihan.
@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
Kekangan angka: @Min/@Max untuk sempadan tepat, @Positive/@PositiveOrZero untuk kekangan tanda, dan @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 Pengesahan Ungkapan Nalar
@Pattern(regexp) mengesahkan rentetan berdasarkan ungkapan nalar. Berguna untuk nombor telefon, kod ZIP dan format tersuai.
@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 mengesahkan format e-mel asas RFC 5321. @URL (Hibernate) mengesahkan format URL. Sentiasa gabungkan kedua-duanya dengan @NotBlank kerana kedua-duanya membenarkan nilai null.
@NotBlank @Email
private String email;
// Hibernate-specific:
@URL(protocol = "https")
private String profileUrl;@Past, @Future, @PastOrPresent
Kekangan temporal mengesahkan nilai tarikh dan masa. Kekangan ini berfungsi dengan LocalDate, LocalDateTime, Instant dan lain-lain.
@Past(message = "Birth date must be in the past")
private LocalDate birthDate;
@Future(message = "Expiry must be in the future")
private LocalDate expiryDate;Mencetuskan Pengesahan dengan @Valid
Tambahkan @Valid pada parameter kaedah pengawal. Spring mengesahkan objek tersebut dan melontarkan MethodArgumentNotValidException apabila pengesahan gagal, lalu memulangkan 400 Permintaan Tidak Sah.
@PostMapping("/users")
public ResponseEntity<UserDto> create(@Valid @RequestBody CreateUserRequest req) {
User user = userService.create(req);
return ResponseEntity.status(201).body(UserDto.from(user));
}Pengesahan Berantai dengan @Valid pada Medan
Untuk mengesahkan objek bersarang, anotasi medan itu dengan @Valid sebagai tambahan kepada kekangan peringkat kelas.
public record OrderRequest(
@NotNull @Valid
AddressRequest shippingAddress, // validates AddressRequest constraints too
@Valid @NotEmpty
List<@Valid LineItemRequest> items
) {}Kumpulan Pengesahan
Gunakan kumpulan untuk menggunakan kekangan yang berbeza dalam konteks yang berbeza (contohnya, Penciptaan berbanding Kemas Kini). Anotasi dengan antara muka kumpulan dan cetuskan 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 Ralat Pengesahan
Tangkap MethodArgumentNotValidException dalam @ControllerAdvice untuk mengambil ralat medan dan membina respons ralat berstruktur.
@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);
}Semakan Pantas
Anotasi manakah yang mengesahkan bahawa String bukan null DAN bukan kosong (bukan sekadar ruang kosong)?
Ringkasan
Anotasikan DTO dengan kekangan Pengesahan Bean. Tambahkan @Valid dalam pengawal untuk mencetuskan pengesahan. Gunakan @NotBlank untuk rentetan, @Size untuk panjang, @Pattern untuk ungkapan nalar, dan @Past/@Future untuk tarikh. Kendalikan ralat dalam @ControllerAdvice.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Pengesahan Bean: @NotNull, @Size, @Pattern” percuma?
Ya — teks penuh “Pengesahan Bean: @NotNull, @Size, @Pattern” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Pengesahan Bean: @NotNull, @Size, @Pattern”?
Anotasikan DTO dengan kekangan Bean Validation dan cetuskan pengesahan dengan @Valid dalam pengawal. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Pengesahan Bean: @NotNull, @Size, @Pattern” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Pengesahan Bean: @NotNull, @Size, @Pattern
- Anotasi Kekangan Tersuai
- Pengendalian Pengecualian Global dengan @ControllerAdvice
- Butiran Masalah RFC 7807 dan Respons Ralat yang Konsisten