Spring Boot でバリデータを使用してインターフェイスパラメータの自動検証を実装する方法

記事ディレクトリ

1. 背景

プロジェクトの開発プロセスでは、フィールドが空でないことの検証、フィールドの長さの検証など、いくつかのフィールドが検証されることがよくありますが、必要なすべての場所に if else を大量に記述すると、コードが冗長になります。検証をより標準化され、洗練されたものにするにはどうすればよいでしょうか?

Spring Boot では、Validation API と Hibernate Validator を使用して、インターフェイス パラメーターの自動検証を実装できます。

2. 使用する

1. メンバー変数が別のオブジェクト エンティティである場合は、変数を追加する必要があります​​@Valid​​。追加しないと、ネストされた検証は有効になりません。

2. 依存関係の追加: Spring Boot プロジェクトの依存関係。validation-api と hibernate-validator はすでに spring-boot-starter-web に含まれているため、追加の参照は必要ありません。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.4.5</version>
    <relativePath/>
</parent>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

Maven プロジェクトは Maven に依存します

  <dependency>
        <groupId>jakarta.validation</groupId>
        <artifactId>jakarta.validation-api</artifactId>
    </dependency>

3. まず、javax.validation の 3 つの非 null 制約アノテーション (@NotNull、@NotEmpty、@NotBlank) の役割を理解する必要があります。

制約 説明する
@NotNull Integer (他の基本クラスを含む) に作用します。@NotNull 制約を Integer 属性に追加した後、属性を null にすることはできず、サイズ制約はありません。@NotNull は Collection、Map、またはコレクション オブジェクトに作用し、コレクション オブジェクトを null にすることはできませんただし、空のセット、つまり size=0 にすることもできます (通常、コレクション オブジェクトには @NotEmpty 制約を使用します)。
@NotBlank @NotBlank 制約を String 属性に追加した後は、trim() 後に属性を null および size>0 にすることはできません。
@空ではない @NotEmpty はコレクション クラスで動作します。@NotEmpty 制約が Collection、Map、および配列に追加された後は、コレクション オブジェクトを null にすることも、空のセットにすることもできません (つまり、サイズ > 0)。

3. 例

コントローラークラス:

public class CustomerSyncController {
    
    

    /**
     * 客户同步
     */
    @ApiOperation(value = "客户同步")
    @PostMapping(value = "/customer/sync")
    public Result<Boolean> syncCustomerInfo(@RequestBody @Valid CustomerInfoVo paramVos) {
    
    
        try {
    
    
            if (!ObjectUtils.isEmpty(paramVos)) {
    
    
                customerInfoService.syncCustomerInfo(paramVos);
            }
        } catch (Exception e) {
    
    
            e.printStackTrace();
            log.error("[syncCustomerInfo] request error,paramVos:{},异常:{}", paramVos, e.getMessage());
            return Result.error(BasicCodeMsg.SERVER_ERROR);
        }
        return Result.success(Boolean.TRUE);
    }
}

エンティティクラス:

@NoArgsConstructor
@Data
public class CustomerInfoVo implements Serializable {
    
    

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "客户id")
    @NotBlank(message = "客户ID不能为空")
    private String customerId;

    @ApiModelProperty(value = "客户姓名")
    @NotBlank(message = "客户姓名不能为空")
    private String name;

    @ApiModelProperty(value = "证件类型")
    @NotNull(message = "证件类型不能为空")
    private Integer certificateType;

    @ApiModelProperty(value = "证件号")
    @NotBlank(message = "证件号不能为空")
    private String certificate;
    }

郵便配達員でテストしてください。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/weixin_47061482/article/details/131958707