Cả 2 trigger Bean Validation trên method argument hoặc field.
@Valid (Jakarta) | @Validated (Spring) | |
|---|---|---|
| Validation groups | ❌ | ✅ |
| Method-level validation | ❌ | ✅ (class level) |
Cơ bản (đều được):
java
@PostMapping
ResponseEntity<User> create(@RequestBody @Valid CreateUserRequest req) { ... }Validation groups với @Validated:
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) {}@Validated trên class:
java
@Service
@Validated
class UserService {
public User find(@NotNull @Positive Long id) { ... }
}Khi validation fail → MethodArgumentNotValidException → bắt bằng @ExceptionHandler.
Both trigger Bean Validation on method arguments or fields.
@Valid (Jakarta) | @Validated (Spring) | |
|---|---|---|
| Validation groups | ❌ | ✅ |
| Method-level validation | ❌ | ✅ (class level) |
Basic usage (either works):
java
@PostMapping
ResponseEntity<User> create(@RequestBody @Valid CreateUserRequest req) { ... }Validation groups with @Validated:
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) {}@Validated on a class:
java
@Service
@Validated
class UserService {
public User find(@NotNull @Positive Long id) { ... }
}When validation fails → MethodArgumentNotValidException → catch with @ExceptionHandler.