Spring Boot のカスタム データ検証アノテーション
Spring Boot では、JSR-303 データ検証仕様を使用してフォーム データの有効性を検証できます。JSR-303 は、 、 などのいくつかの一般的なデータ検証アノテーションを提供@NotNull
し@NotBlank
ます@Size
。ただし、実際の開発では、特定のニーズに合わせてデータ検証アノテーションをカスタマイズする必要がある場合があります。この記事では、Spring Boot でデータ検証アノテーションをカスタマイズする方法を紹介し、その使用法を示すサンプル コードを提供します。
カスタム検証アノテーション
Spring Boot では、アノテーションを定義し、 @Constraint
annotations。@ZipCode
以下は、郵便番号が合法かどうかを確認するためのカスタム アノテーションです。
@Target({
ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = ZipCodeValidator.class)
public @interface ZipCode {
String message() default "Invalid zip code";
Class<?>[] groups() default {
};
Class<? extends Payload>[] payload() default {
};
@Target({
ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface List {
ZipCode[] value();
}
}
上記のコードでは、@Constraint
アノテーションをZipCodeValidator
クラスを使用してアノテーションを検証する必要があることを示しています。@Constraint
アノテーション内のパラメータの意味は次のとおりです。
validatedBy
: 検証に使用するクラスを示します。message
: 検証が失敗した場合に返されるメッセージ。groups
:グループをチェックします。payload
:負荷を確認します。
アノテーションでは、複数のアノテーションの使用をサポートするZipCodeValidator.List
内部アノテーションを定義します。@ZipCode
カスタムバリデーター
検証アノテーションをカスタマイズした後、バリデーターも実装する必要があります。ZipCodeValidator
バリデーターのコード例は次のとおりです。
public class ZipCodeValidator implements ConstraintValidator<ZipCode, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
if (value == null) {
return true;
}
Pattern pattern = Pattern.compile("\\d{5}");
Matcher matcher = pattern.matcher(value);
return matcher.matches();
}
}
上記のコードでは、ConstraintValidator<ZipCode, String>
インターフェイス、isValid
メソッドをオーバーライドしました。isValid
メソッドは実際の検証ロジックに使用されます。この例では、正規表現を使用して、郵便番号が 5 桁の形式に準拠していることを検証します。
カスタム検証アノテーションを使用する
カスタム検証アノテーションとバリデータを定義した後、Java オブジェクトでカスタム検証アノテーションを使用できるようになります。サンプルコードは次のとおりです。
public class Address {
@ZipCode
private String zipCode;
// 省略 getter 和 setter 方法
}
上記のコードではAddress
、クラスのzipCode
プロパティに@ZipCode
アノテーション。使用する場合、アノテーションにmessage
パラメータが指定されているため、パラメータを指定する必要はありません。@ZipCode
コントローラーでは、@Valid
アノテーション。例えば:
@RestController
@RequestMapping("/addresses")
public class AddressController {
@PostMapping
public ResponseEntity<?> createAddress(@Valid @RequestBody Address address) {
// 创建地址
return ResponseEntity.ok().build();
}
}
上記のサンプル コードでは、@Valid
アノテーションRequestBody
内のAddress
オブジェクトを検証する必要があることを示しました。検証が失敗した場合、Spring Boot は自動的にエラー メッセージを含む応答を返します。
要約する
この記事では、Spring Boot でデータ検証アノテーションをカスタマイズする方法を紹介し、その使用法を示すサンプル コードを提供しました。カスタム検証アノテーションを使用すると、特定のデータ検証要件を満たすことができるため、Web アプリケーションのセキュリティと信頼性が向上します。Web アプリケーションの開発時にデータ検証を実行する必要があり、デフォルトのデータ検証アノテーションではニーズを満たせない場合は、カスタム検証アノテーションを使用する方法を必ず検討してください。