Spring MVC のデータ バインディングと検証メカニズムとその使用方法とは何ですか

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 アノテーションとバリデーターを使用して実現できます。データ バインディングと検証は、コードの作成を簡素化し、システムの堅牢性と信頼性を向上させるのに役立ちます。

おすすめ

転載: blog.csdn.net/JasonXu94/article/details/131626082