Spring フレームワークでは、@Valid
アノテーションは、ユーザーが入力したデータを検証してデータの合法性と整合性を確保するための強力なツールです。他のアノテーションやバリデーターと組み合わせることで、@Valid
アノテーションはデータ検証を簡単に実装できるため、アプリケーションの堅牢性とセキュリティが向上します。この記事では、Spring のアノテーション@Valid
と、それをアプリケーションで正しく使用する方法について詳しく説明します。
注釈とは何ですか@Valid
?
@Valid
アノテーションは Spring フレームワークのアノテーションで、メソッドのパラメーターまたはメソッドの戻り値のデータ検証の対象をマークするために使用されます。これは、メソッド呼び出しを処理するときにデータ検証を実行するように Spring に指示します。@NotNull
このアノテーションは通常、検証ルールを指定するために、@NotBlank
、@Min
、などの他の検証関連のアノテーションと組み合わせて使用されます@Max
。
@Valid
アノテーションを使用したメソッドパラメータの検証
メソッドのパラメータにアノテーションを使用すると@Valid
、メソッドの呼び出し前にパラメータを検証できます。これは、入力データの有効性を保証するのに役立ちます。
@Valid
Spring コントローラー メソッドでパラメーター検証にアノテーションを使用する方法を示す例を次に示します。
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@PostMapping("/register")
public ResponseEntity<String> registerUser(@Valid @RequestBody UserDto userDto) {
// 处理用户注册逻辑
return ResponseEntity.ok("User registered successfully");
}
}
上の例では、パラメータに@Valid
アノテーションが使用されています。userDto
Spring はregisterUser
メソッドを呼び出す前にuserDto
パラメータのプロパティを検証します。
他の検証アノテーションと組み合わせる
通常、@Valid
アノテーションは、検証ルールを定義するために他の検証関連のアノテーションと組み合わせて使用されます。たとえば@NotNull
、@NotBlank
、@Min
、@Max
などの注釈を使用して、属性に対してより具体的な検証を実行できます。
public class UserDto {
@NotNull
@NotBlank
private String username;
@NotNull
@Min(18)
private Integer age;
// ...其他属性和方法
}
上の例では、username
属性には@NotNull
との注釈が付けられており@NotBlank
、空にすることはできず、スペースだけを含めることもできないことを示しています。age
属性には@NotNull
との注釈が付けられ@Min(18)
、空にすることはできず、18 以上である必要があることを示します。
Spring フレームワークでは、さまざまな検証アノテーションを使用して、さまざまな種類の検証ルールを定義できます。これらの注釈はパッケージの下にありjavax.validation.constraints
、データのさまざまな側面を検証するために使用されます。以下に、いくつかの一般的な検証アノテーションとそれに対応する検証ルールを示します。
-
@NotNull
:検証フィールドは使用できませんnull
。 -
@NotBlank
:検証文字列を空にすることはできず、少なくとも 1 つの非 null 文字が含まれています。 -
@NotEmpty
:文字列、コレクション、または配列が空でないことの検証とは異なり、@NotBlank
少なくとも 1 つの非 null 文字は必要ありません。 -
@Min(value)
:検証番号は、指定された最小値以上である必要があります。 -
@Max(value)
:検証番号は、指定された最大値以下である必要があります。 -
@Size(max, min)
:文字列、コレクション、または配列のサイズが指定された範囲内にある必要があることを検証します。 -
@Email
:文字列が有効な電子メール アドレスであることを確認してください。 -
@Pattern(regexp)
処置:文字列が指定された正規表現と一致することを確認してください。 -
@Digits(integer, fraction)
:数値が、整数部と小数部を含む指定された桁数を満たしていることを検証します。 -
@Positive
:検証番号は正の値である必要があります。 -
@Negative
:検証番号は負の値である必要があります。 -
@Past
:検証日は過去のものである必要があります。 -
@Future
:検証日は将来の日付である必要があります。 -
@AssertTrue
:検証フィールドは である必要がありますtrue
。 -
@AssertFalse
:検証フィールドは である必要がありますfalse
。 -
@CreditCardNumber
:文字列が有効なクレジット カード番号であることを確認してください。 -
@URL
:文字列が有効な URL かどうかを確認してください。 -
@Valid
:ネストされた検証が必要なオブジェクトをマークするために使用されます。
これらは一般的な検証アノテーションの一部にすぎません。実際、Spring ではさらに多くの検証アノテーションが利用可能です。適切な検証アノテーションを選択して、特定のビジネス ニーズに基づいてデータ検証ルールを定義できます。さらに、特定の検証要件を満たすために、カスタム バリデーターによってより複雑な検証ロジックを実装することもできます。
カスタムバリデーター
事前定義された検証アノテーションの使用に加えて、特定の検証ニーズを満たすカスタム バリデータを作成することもできます。カスタム バリデータを作成するには、javax.validation.ConstraintValidator
インターフェイスを実装します。
以下は、カスタム バリデーターの作成方法を示す例です。
import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;
public class AgeConstraintValidator implements ConstraintValidator<AgeConstraint, Integer> {
@Override
public boolean isValid(Integer age, ConstraintValidatorContext context) {
return age != null && age >= 18;
}
}
その後、カスタム アノテーションでこのバリデータを使用できます。
import javax.validation.Constraint;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target({
FIELD, METHOD, PARAMETER})
@Retention(RUNTIME)
@Constraint(validatedBy = AgeConstraintValidator.class)
public @interface AgeConstraint {
String message() default "Invalid age";
Class<?>[] groups() default {
};
Class<? extends Payload>[] payload() default {
};
}
最後に、このカスタム アノテーションを検証する必要があるプロパティに適用します。
public class UserDto {
@NotNull
@NotBlank
private String username;
@AgeConstraint
private Integer age;
// ...其他属性和方法
}
要約する
@Valid
アノテーションは、データの検証と検証のための Spring フレームワークの重要なツールです。他の検証アノテーションやカスタムバリデータと組み合わせると、
ユーザーが入力したデータを簡単に検証し、アプリケーションの安定性とセキュリティを向上させます。メソッドのパラメータまたはメソッドの戻り値にアノテーションを追加することで@Valid
、データの有効性を確保し、データが無効な場合には対応するエラー メッセージを生成することができるため、ユーザー エクスペリエンスとデータの整合性が向上します。