我有一个 POJO,其中一些字段用
@NotEmpty
注释:
public class SampleFormInputDTO {
@NotEmpty
private String textarea;
private int myInt = 0;
@NotEmpty
private String myText = "somevalue";
public String getTextarea() {
return textarea;
}
public void setTextarea(String textarea) {
this.textarea = textarea;
}
}
目的是检查字段以确保它们包含一个值,即不为空且不为空。
如果我使用无参数构造函数创建
SampleFormInputDTO
的实例,则字段 textarea
最初将为 null,因此应该并且确实会按预期失败验证。
SampleFormInputDTO sampleFormInputDTO = new SampleFormInputDTO();
ValidatorFactory validatorFactory =
Validation.byDefaultProvider()
.configure()
.messageInterpolator(new ParameterMessageInterpolator())
.buildValidatorFactory();
Validator validator = validatorFactory.getValidator(sampleFormInputDTO);
Set<ConstraintViolation<SampleFormInputDTO>> violationSet = validator.validate();
我想知道是否可以动态/以编程方式指示验证器实例不验证特定字段的特定约束注释?
假设我已确定,作为处理 REST API 调用的一部分,我希望
textarea
类型的字段 SampleFormInputDTO
动态允许空字符串,但仅限于该特定字段。不影响同一 POJO 中其他字段上可能存在的任何约束注释。
这可能吗?
您可能想看看验证组。
public class SampleFormInputDTO {
@NotEmpty(groups = Group1.class)
private String textarea;
private int myInt = 0;
@NotEmpty
private String myText = "somevalue";
public String getTextarea() {
return textarea;
}
public void setTextarea(String textarea) {
this.textarea = textarea;
}
}
然后您可以控制哪些约束包含在验证中,哪些不包含在验证中,例如:
validator.validate(sampleFormInputDTO);
只会检查
myText
属性,但随后会类似:
validator.validate(sampleFormInputDTO, Group1.class, Default.class);
将验证两者。
因此,如果我理解正确,您的问题是您想要验证字段,但如果提交了空对象,您不希望通过异常, 您可以尝试两种方案,第一种是将验证放在 args 构造函数中,因此当使用无参数构造函数时不会发生验证,请检查此示例:
public class Employee {
...
public Employee (@NotNull String name) { ... }
public void setSalary(
@NotNull
@Digits(integer=6, fraction=2) BigDecimal salary,
@NotNull
@ValidCurrency
String currencyType) {
...
}
...
}
链接是这里
或者您可以构建自己的自定义验证: 检查这里
我也相信您可以使用正则表达式并提供适合您情况的模式 检查这个