Spring Boot のカスタム データ検証アノテーション

Spring Boot のカスタム データ検証アノテーション

Spring Boot では、JSR-303 データ検証仕様を使用してフォーム データの有効性を検証できます。JSR-303 は、 、 などのいくつかの一般的なデータ検証アノテーションを提供@NotNull@NotBlankます@Sizeただし、実際の開発では、特定のニーズに合わせてデータ検証アノテーションをカスタマイズする必要がある場合があります。この記事では、Spring Boot でデータ検証アノテーションをカスタマイズする方法を紹介し、その使用法を示すサンプル コードを提供します。

ここに画像の説明を挿入

カスタム検証アノテーション

Spring Boot では、アノテーションを定義し、 @Constraintannotations。@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 アプリケーションの開発時にデータ検証を実行する必要があり、デフォルトのデータ検証アノテーションではニーズを満たせない場合は、カスタム検証アノテーションを使用する方法を必ず検討してください。

おすすめ

転載: blog.csdn.net/2302_77835532/article/details/131326452