Spring MVC アプリケーションでは、データ バインディングと検証は非常に重要な部分であり、ユーザーが送信したデータを Java オブジェクトにバインドし、データを検証してデータの正確さと信頼性を確保するのに役立ちます。Spring MVC では、データ バインディングと検証メカニズムはアノテーションを通じて実装されます。この記事では、Spring MVC のデータ バインディングと検証のメカニズムとその使用方法を紹介します。
データバインディング
データ バインディングは、ユーザーが送信したデータを Java オブジェクトにバインドするプロセスです。Spring MVC では、データ バインディングは @ModelAttribute アノテーションを通じて実現されます。
@ModelAttribute アノテーション
@ModelAttribute アノテーションは、リクエスト パラメータを Java オブジェクトにバインドするために使用され、メソッド パラメータまたはメソッドの戻り値に使用できます。
@ModelAttribute アノテーションがメソッドのパラメータで使用される場合、リクエスト パラメータがメソッドのパラメータにバインドされていることを示します。例えば:
@GetMapping("/user")
public String getUser(@ModelAttribute("id") Long id) {
// ...
}
この例では、 @ModelAttribute("id") アノテーションは、HTTP リクエスト パラメーター内の id という名前のパラメーターがメソッドの id パラメーターにバインドされていることを示します。
@ModelAttribute アノテーションがメソッドの戻り値に使用される場合、メソッドの戻り値がモデルに追加されることを意味します。例えば:
@ModelAttribute("user")
public User getUser(@RequestParam("id") Long id) {
User user = userRepository.findById(id).orElse(null);
return user;
}
この例では、 @ModelAttribute(“user”) アノテーションは getUser メソッドの戻り値をモデルに追加し、user という名前の変数を使用してビュー内でそれを参照します。
データ型変換
リクエストパラメータを Java オブジェクトにバインドするとき、Spring MVC は Java オブジェクトのタイプに基づいてリクエストパラメータを自動的に変換します。たとえば、リクエストパラメータを Integer 型のプロパティにバインドする場合、Spring MVC は文字列型のリクエストパラメータを Integer 型に自動的に変換します。
リクエスト パラメータの型が Java オブジェクトの型と一致しない場合、またはリクエスト パラメータの形式が正しくない場合、データ バインディングは失敗します。このとき、Spring MVC は例外をスローし、例外情報をクライアントに返します。
データバインディングの使用
データ バインディングは、ユーザーが送信したデータを Java オブジェクトにバインドするのに役立ち、コードの記述を簡素化します。データ バインディングを使用する場合、ユーザーが送信したデータを保存する Java オブジェクトを定義する必要があります。次に、 @ModelAttribute アノテーションを使用してリクエスト パラメータを Java オブジェクトにバインドし、コントローラ内の Java オブジェクトを使用してユーザーが送信したデータを処理できます。
たとえば、ユーザーが送信したデータを保存する User クラスを定義します。
public class User {
private Long id;
private String name;
private Integer age;
// getters and setters
}
次に、コントローラーで @ModelAttribute アノテーションを使用して、リクエスト パラメーターを User オブジェクトにバインドします。
@PostMapping("/user")
public String saveUser(@ModelAttribute("user") User user) {
// ...
}
この例では、 @ModelAttribute("user") アノテーションは、リクエスト パラメーターが user という名前の User オブジェクトにバインドされていることを示しています。
データ検証
データ検証とは、ユーザーが提出したデータを検証し、データの正確性と信頼性を保証することです。Spring MVC では、データ検証は @Valid アノテーションとバリデーター (Validator) によって実装されます。
@有効なアノテーション
@Valid アノテーションはデータ検証を有効にするために使用され、メソッドのパラメーターまたはメソッドの戻り値に使用できます。
@Valid アノテーションがメソッドのパラメーターで使用される場合、それはメソッド パラメーターのデータ検証を示します。例えば:
@PostMapping("/user")
public String saveUser(@Valid @ModelAttribute("user") User user, BindingResult result) {
// ...
}
この例では、 @Valid アノテーションは、 @ModelAttribute("user") アノテーションにバインドされた User オブジェクトのデータ検証を表します。
@Valid アノテーションがメソッドの戻り値で使用される場合、それはメソッドの戻り値でのデータ検証を示します。例えば:
@PostMapping("/user")
@Validated
public String saveUser(@ModelAttribute("user") User user) {
// ...
}
この例では、 @Validated アノテーションは、saveUser メソッドの戻り値のデータ検証を表します。
バリデーター
バリデータは、データの形式またはビジネス ルールに基づいてデータを検証するために使用されるコンポーネントです。Spring MVC では、バリデーターは Validator インターフェースを実装することによって実装されます。
Validator インターフェイスは 2 つのメソッドを定義します。
- Supports(Class<?> clazz): バリデーターが指定されたデータ型をサポートするかどうかを判断するために使用されます。
- validate(Object target, Errorserrors): ターゲット オブジェクトを検証し、検証結果を Errors オブジェクトに保存するために使用されます。
Validator インターフェイスを実装し、独自のバリデータを作成できます。たとえば、User オブジェクトが要件を満たしているかどうかを確認する UserValidator クラスを定義します。
@Component
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return User.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;
if (user.getName() == null || user.getName().isEmpty()) {
errors.rejectValue("name", "user.name.required", "Name is required");
}
if (user.getAge() != null && user.getAge() < 0) {
errors.rejectValue("age", "user.age.invalid", "Age is invalid");
}
}
}
この例では、UserValidator クラスは Validator インターフェイスを実装し、supports() メソッドと validate() メソッドをオーバーライドします。supports() メソッドはバリデーターが User 型データをサポートするかどうかを判断するために使用され、validate() メソッドは User オブジェクトを検証し、検証結果を Errors オブジェクトに保存するために使用されます。
データ検証の使用
データ検証は、ユーザーから送信されたデータの正確性と信頼性を保証し、システムの堅牢性と信頼性を向上させるのに役立ちます。データ検証を使用する場合、ユーザーが送信したデータを検証するためのバリデーターを定義する必要があります。次に、 @Valid アノテーションを使用してデータ検証を有効にし、コントローラーで BindingResult オブジェクトを使用して検証結果を取得します。
たとえば、User オブジェクトを検証するための UserValidator クラスを定義します。
@Component
public class UserValidator implements Validator {
@Override
public boolean supports(Class<?> clazz) {
return User.class.isAssignableFrom(clazz);
}
@Override
public void validate(Object target, Errors errors) {
User user = (User) target;
if (user.getName() == null || user.getName().isEmpty()) {
errors.rejectValue("name", "user.name.required", "Name is required");
}
if (user.getAge() != null && user.getAge() < 0) {
errors.rejectValue("age", "user.age.invalid", "Age is invalid");
}
}
}
次に、コントローラーで @Valid アノテーションを使用してデータ検証を有効にし、BindingResult オブジェクトを使用して検証結果を取得します。
@PostMapping("/user")
public String saveUser(@Valid @ModelAttribute("user") User user, BindingResult result) {
if (result.hasErrors()) {
// 处理验证错误
} else {
// 保存用户数据
}
}
この例では、@Valid アノテーションはデータ検証機能を有効にすることを意味し、@ModelAttribute("user") アノテーションはリクエスト パラメーターを User オブジェクトにバインドすることを意味し、BindingResult オブジェクトは検証結果を取得するために使用されます。
要約する
この記事では、Spring MVC のデータ バインディングと検証メカニズムを紹介します。データ バインディングは、ユーザーが送信したデータを Java オブジェクトにバインドするプロセスであり、@ModelAttribute アノテーションを使用して実現できます。データ検証は、ユーザーが送信したデータを検証することです。これは @Valid アノテーションとバリデーターを使用して実現できます。データ バインディングと検証は、コードの作成を簡素化し、システムの堅牢性と信頼性を向上させるのに役立ちます。