Cả 2 trigger Bean Validation trên method argument hoặc field.
@Valid (Jakarta) | @Validated (Spring) | |
|---|---|---|
| Validation groups | ❌ | ✅ |
| Method-level validation | ❌ | ✅ (đặt class level) |
Cơ bản (dùng cái nào cũng được): create(@RequestBody @Valid CreateUserRequest req).
Khác biệt thực sự — validation groups:
java
interface OnCreate {} interface OnUpdate {}
record UserRequest(
@Null(groups = OnCreate.class) @NotNull(groups = OnUpdate.class) Long id,
@NotBlank String name
) {}
@PostMapping ResponseEntity<User> create(@RequestBody @Validated(OnCreate.class) UserRequest req) {}
@PutMapping ResponseEntity<User> update(@RequestBody @Validated(OnUpdate.class) UserRequest req) {}Cùng 1 DTO, rule khác nhau theo ngữ cảnh (create: id phải null; update: id bắt buộc).
@Validated đặt trên class còn bật validate tham số method thường: find(@NotNull @Positive Long id).
Validation fail → MethodArgumentNotValidException → bắt bằng @ExceptionHandler (xem câu @ControllerAdvice).