การตรวจสอบ Bean: @NotNull, @Size, @Pattern
ใส่ข้อจำกัดการตรวจสอบ Bean ให้ DTO และเรียกใช้การตรวจสอบด้วย @Valid ในคอนโทรลเลอร์
การตรวจสอบ Bean: @NotNull, @Size, @Pattern เป็นบทเรียน Java Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Java Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
การตรวจสอบความถูกต้องของบีนคืออะไร
การตรวจสอบความถูกต้องของบีน (การตรวจสอบความถูกต้องของบีนของจาการ์ตา รุ่น 3.0) มีคำอธิบายประกอบข้อจำกัดแบบประกาศสำหรับบีนของ Java โดย Spring Boot จะกำหนดค่าตัวตรวจสอบโดยอัตโนมัติ และเรียกใช้ผ่าน @Valid หรือ @Validated
@NotNull, @NotEmpty, @NotBlank
@NotNull: ค่าต้องไม่เป็นค่าว่าง @NotEmpty: ต้องไม่เป็นค่าว่างและต้องไม่ว่างเปล่า (สำหรับสตริงหรือคอลเลกชัน) @NotBlank: ต้องไม่เป็นค่าว่าง ไม่ว่างเปล่า และต้องไม่ประกอบด้วยช่องว่างเพียงอย่างเดียว ควรใช้ @NotBlank กับสตริง
public record CreateUserRequest(
@NotBlank(message = "Name is required")
String name,
@NotBlank @Email
String email,
@NotNull
UserRole role
) {}@Size และ @Length
@Size(min, max) ใช้จำกัดขนาดของสตริง คอลเลกชัน แมป และอาร์เรย์ ส่วน @Length (Hibernate) ใช้ได้เฉพาะกับสตริง ควรเลือกใช้ @Size เพื่อให้พกพาไปใช้กับระบบอื่นได้
@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
ข้อจำกัดด้านตัวเลข: @Min/@Max ใช้กำหนดขอบเขตที่แน่นอน @Positive/@PositiveOrZero ใช้กำหนดข้อจำกัดด้านเครื่องหมาย และ @DecimalMin/@DecimalMax ใช้กับ BigDecimal
@Min(1) @Max(100)
private int quantity;
@DecimalMin("0.01") @DecimalMax("99999.99")
private BigDecimal price;
@Positive
private long orderId;@Pattern สำหรับการตรวจสอบนิพจน์ทั่วไป
@Pattern(regexp) ตรวจสอบสตริงโดยเทียบกับนิพจน์ทั่วไป เหมาะสำหรับหมายเลขโทรศัพท์ รหัสไปรษณีย์ และรูปแบบที่กำหนดเอง
@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 และ @URL
@Email ตรวจสอบรูปแบบอีเมลตามกฎพื้นฐานของ RFC 5321 ส่วน @URL (Hibernate) ตรวจสอบรูปแบบ URL ควรใช้ร่วมกับ @NotBlank เสมอ เนื่องจากทั้งสองคำอธิบายประกอบนี้อนุญาตให้เป็นค่าว่างได้
@NotBlank @Email
private String email;
// Hibernate-specific:
@URL(protocol = "https")
private String profileUrl;@Past, @Future, @PastOrPresent
ข้อจำกัดด้านเวลาจะตรวจสอบค่าวันที่และเวลา ใช้ได้กับ LocalDate, LocalDateTime, Instant และชนิดอื่น ๆ
@Past(message = "Birth date must be in the past")
private LocalDate birthDate;
@Future(message = "Expiry must be in the future")
private LocalDate expiryDate;การเรียกใช้การตรวจสอบด้วย @Valid
เพิ่ม @Valid ให้กับพารามิเตอร์ของเมธอดตัวควบคุม Spring จะตรวจสอบออบเจ็กต์และโยน MethodArgumentNotValidException เมื่อตรวจสอบไม่ผ่าน พร้อมส่งคืนข้อผิดพลาด 400 คำขอไม่ถูกต้อง
@PostMapping("/users")
public ResponseEntity<UserDto> create(@Valid @RequestBody CreateUserRequest req) {
User user = userService.create(req);
return ResponseEntity.status(201).body(UserDto.from(user));
}การตรวจสอบแบบต่อเนื่องด้วย @Valid บนฟิลด์
หากต้องการตรวจสอบออบเจ็กต์ซ้อนกัน ให้ใส่คำอธิบายประกอบ @Valid ที่ฟิลด์นั้นเพิ่มเติมจากข้อจำกัดระดับคลาส
public record OrderRequest(
@NotNull @Valid
AddressRequest shippingAddress, // validates AddressRequest constraints too
@Valid @NotEmpty
List<@Valid LineItemRequest> items
) {}กลุ่มการตรวจสอบ
ใช้กลุ่มเพื่อใช้ข้อจำกัดที่แตกต่างกันในบริบทที่ต่างกัน (เช่น การสร้างกับการปรับปรุง) ใส่คำอธิบายประกอบด้วยอินเทอร์เฟซของกลุ่ม และเรียกใช้ด้วย @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) { ... }การอ่านข้อผิดพลาดจากการตรวจสอบ
ดักจับ MethodArgumentNotValidException ใน @ControllerAdvice เพื่อดึงข้อผิดพลาดของฟิลด์และสร้างการตอบกลับข้อผิดพลาดที่มีโครงสร้าง
@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);
}ตรวจสอบความเข้าใจอย่างรวดเร็ว
คำอธิบายประกอบใดตรวจสอบว่า String ไม่เป็นค่าว่าง และไม่เว้นว่าง (ไม่ใช่แค่ช่องว่าง)
สรุปทบทวน
ใส่ข้อจำกัดการตรวจสอบความถูกต้องของบีนให้กับออบเจ็กต์ถ่ายโอนข้อมูล เพิ่ม @Valid ในตัวควบคุมเพื่อเรียกใช้การตรวจสอบ ใช้ @NotBlank กับสตริง @Size สำหรับความยาว @Pattern สำหรับนิพจน์ทั่วไป และ @Past/@Future สำหรับวันที่ จัดการข้อผิดพลาดใน @ControllerAdvice
คำถามที่พบบ่อย
บทเรียน “การตรวจสอบ Bean: @NotNull, @Size, @Pattern” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การตรวจสอบ Bean: @NotNull, @Size, @Pattern” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Java Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Java Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การตรวจสอบ Bean: @NotNull, @Size, @Pattern”
ใส่ข้อจำกัดการตรวจสอบ Bean ให้ DTO และเรียกใช้การตรวจสอบด้วย @Valid ในคอนโทรลเลอร์ คุณปฏิบัติ Java Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Java Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Java Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การตรวจสอบ Bean: @NotNull, @Size, @Pattern” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Java Academy นี้ได้ไหม
ได้ บทเรียน Java Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การตรวจสอบ Bean: @NotNull, @Size, @Pattern
- คำอธิบายข้อจำกัดแบบกำหนดเอง
- การจัดการข้อยกเว้นแบบรวมศูนย์ด้วย @ControllerAdvice
- รายละเอียดปัญหา RFC 7807 และการตอบกลับข้อผิดพลาดอย่างสอดคล้อง