0

我已使用弹簧验证请求 DTO,如下所示。

@Getter
@Setter
public class DeviceData implements Serializable {
    @NotBlank(message = "device id required")
    private String deviceId;

    @NotBlank(message = "client trans id required")
    @Pattern(regexp = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
        , message = "client trans id format error")
    private String clientTransId;

    @NotBlank(message = "device info required")
    private String deviceInfo;

}

我想@NotBlank先检查,当它为假时,不检查@Pattern。当它真正检查时@Pattern。它是怎么做到的?请帮帮我。谢谢

4

1 回答 1

1

您可以使用Group,如下所示:

首先,您需要声明一个新组:

public interface Group1 {

}

其次,根据需要声明一个自定义序列:

// Default is nessary here
@GroupSequence({Default.class, Group1.class})
public interface Sequence {

}

然后,在您的 DTO 字段中添加组:

@NotBlank(message = "client trans id required", groups = {Default.class})
@Pattern(regexp = "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$", message = "client trans id format error", groups = {Group1.class})
private String clientTransId;

最后,使用验证器和您的Sequence界面进行验证:

DeviceData test = new DeviceData();
test.clientTransId = "";

Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
Set<ConstraintViolation<DeviceData>> set = validator.validate(test, Sequence.class);
于 2021-07-20T04:59:34.563 回答