1. @Valid
的使用
@Valid
是 Java Bean Validation 規範(JSR-303/JSR-380)中的標準註解。它用於觸發對 Java Bean 的驗證。你可以在類的欄位上使用驗證註解(如 @NotNull
, @Size
, @Min
, @Max
等),然後使用 @Valid
來觸發對這些欄位的驗證。
示例:
java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.Valid;
public class User {
@NotNull
private String name;
@Size(min = 18)
private int age;
// Getters and Setters
}
public class UserRequest {
@Valid
private User user;
// Getters and Setters
}
在這個例子中,UserRequest
類中有一個 User
型別的欄位 user
,並使用了 @Valid
註解,這樣在驗證 UserRequest
物件時,Spring 會自動驗證 user
欄位中 User
類的約束條件。
2. @Validated
的使用
@Validated
是 Spring 提供的一個註解,它擴充套件了 @Valid
,並增加了對分組驗證的支援。分組驗證允許你根據不同的驗證場景,選擇不同的驗證規則。
分組驗證的概念
透過定義驗證分組,你可以在不同的情況下執行不同的驗證。例如,某些欄位在建立時是必填的,而在更新時則可以是可選的。
示例:
- 定義驗證分組:
java
public interface CreateGroup {}
public interface UpdateGroup {}
- 在實體類中使用分組:
java
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
public class User {
@NotNull(groups = CreateGroup.class)
private String name;
@Size(min = 18, groups = CreateGroup.class)
private int age;
@Size(min = 1, groups = UpdateGroup.class)
private String nickname;
// Getters and Setters
}
- 在控制器中使用
@Validated
和指定分組:
java
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@RestController
public class UserController {
@PostMapping("/createUser")
public String createUser(@RequestBody @Validated(CreateGroup.class) User user) {
// 這裡會進行 CreateGroup 組的驗證
return "User created!";
}
@PutMapping("/updateUser")
public String updateUser(@RequestBody @Validated(UpdateGroup.class) User user) {
// 這裡會進行 UpdateGroup 組的驗證
return "User updated!";
}
}
@Valid
和 @Validated
的區別
-
基本功能:
@Valid
是 JSR-303/JSR-380 規範的一部分,用於觸發驗證。@Validated
是 Spring 的擴充套件,除了觸發驗證外,還支援驗證分組。
-
驗證分組:
@Valid
不支援驗證分組,只會按照預設的驗證規則進行驗證。@Validated
支援驗證分組,可以根據不同的驗證場景選擇不同的驗證規則。
-
使用場景:
- 如果你不需要分組驗證,只需進行普通的驗證,可以使用
@Valid
。 - 如果你需要根據不同的業務場景執行不同的驗證邏輯,則可以使用
@Validated
配合分組。
- 如果你不需要分組驗證,只需進行普通的驗證,可以使用
總結:
@Valid
:標準的 Bean Validation 註解,適用於一般的驗證場景。@Validated
:Spring 提供的擴充套件,支援驗證分組,適用於需要分組驗證的場景。
在大多數簡單的應用中,@Valid
足以滿足需求。但是如果你需要根據不同的請求場景(如建立和更新)進行不同的驗證,@Validated
將更加靈活。