[英]Nothing happens when trying to validate fields with Bean Validation
[英]Bean validation - validate optional fields
给定一个表示从表单提交的有效负载的类,我想将bean验证应用于可能存在或可能不存在的字段,例如:
class FormData {
@Pattern(...)
@Size(...)
@Whatever(...)
private String optionalField;
...
}
如果没有在有效负载中发送optionalField
,则我不想应用上面的任何验证器,但是如果发送了验证器,则我想应用所有验证器。 如何做呢?
谢谢。
因此通常所有这些约束都将null
值视为有效。 如果您的可选字段不为有效负载的一部分时为null
,则所有字段都应该可以正常工作。
对于任何必填字段,您可以在其上加上@NotNull
。
编辑这是一个例子:
class FormData {
@Pattern(regexp = "\\d+")
@Size(min = 3, max = 3)
private final String optionalField;
@Pattern(regexp = "[a-z]+")
@Size(min = 3, max = 3)
@NotNull
private final String mandatoryField;
}
@Test
public void test() {
Validator validator = getValidator();
// optonal field is null so no violations will rise on it
FormData data = new FormData( null, "abc" );
Set<ConstraintViolation<FormData>> violations = validator.validate( data );
assertThat( violations ).isEmpty();
// optional field is present but it should fail the pattern validation:
data = new FormData( "aaa", "abc" );
violations = validator.validate( data );
assertThat( violations ).containsOnlyViolations(
violationOf( Pattern.class ).withProperty( "optionalField" )
);
}
您会看到在第一种情况下,您不会收到任何违规信息,因为可选字段为null
。 但在第二个示例中,由于aaa
不是数字字符串,您会收到违反模式约束的信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.