@NotNull 对 JSR-303 验证的说明
@NotNull clarification for JSR-303 validation
我有一个带有 JSR-303 注释的 POJO。它的一些属性是其他 POJO。
我希望内部 POJO 为@Valid,前提是它们不为空。但是,如果它们为空,那也没关系。
不幸的是,我没有成功这样做,所以 Java returns 如果内部 POJOs 属性为 null,则将错误告诉我。
@AllArgsConstructor @NoArgsConstructor @Data
class OuterPojo{
@NotBlank private String attributeA;
@Valid private InnerPojo attributeB;
}
@AllArgsConstructor @NoArgsConstructor @Data
class InnerPojo{
@NotBlank private String attributeC;
@NotNull private Double attributeD;
}
如果满足以下条件,我希望 outerPojo 有效:
- attributeA 不为空,attributeB 为空;
- attributeB 不为空且 attributeB 不为空且有效。
所以我希望仅当内部 pojo 不为 null 时才遵守对内部 pojo 属性的约束。
我试过将 @Nullable 添加到 attributeB 但没有效果。
我该如何解决?
只需添加@Valid 就意味着如果不为空则有效。 JSR 303 的 Section 3.5.1:Bean 验证规范在验证对象图时说 "Null references are ignored"。
我使用 Hibernate Validator 6.0 验证了这一点。2.Final 和这个简单的测试 class。
public class Main {
public static void main(String[] args) {
OuterPojo outer = new OuterPojo("some value", null);
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator v = factory.getValidator();
Set<ConstraintViolation<OuterPojo>> errors = v.validate(outer);
for (ConstraintViolation<OuterPojo> violation : errors) {
System.out.println(violation.getMessage());
}
}
}
我有一个带有 JSR-303 注释的 POJO。它的一些属性是其他 POJO。 我希望内部 POJO 为@Valid,前提是它们不为空。但是,如果它们为空,那也没关系。 不幸的是,我没有成功这样做,所以 Java returns 如果内部 POJOs 属性为 null,则将错误告诉我。
@AllArgsConstructor @NoArgsConstructor @Data
class OuterPojo{
@NotBlank private String attributeA;
@Valid private InnerPojo attributeB;
}
@AllArgsConstructor @NoArgsConstructor @Data
class InnerPojo{
@NotBlank private String attributeC;
@NotNull private Double attributeD;
}
如果满足以下条件,我希望 outerPojo 有效:
- attributeA 不为空,attributeB 为空;
- attributeB 不为空且 attributeB 不为空且有效。
所以我希望仅当内部 pojo 不为 null 时才遵守对内部 pojo 属性的约束。
我试过将 @Nullable 添加到 attributeB 但没有效果。 我该如何解决?
只需添加@Valid 就意味着如果不为空则有效。 JSR 303 的 Section 3.5.1:Bean 验证规范在验证对象图时说 "Null references are ignored"。
我使用 Hibernate Validator 6.0 验证了这一点。2.Final 和这个简单的测试 class。
public class Main {
public static void main(String[] args) {
OuterPojo outer = new OuterPojo("some value", null);
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator v = factory.getValidator();
Set<ConstraintViolation<OuterPojo>> errors = v.validate(outer);
for (ConstraintViolation<OuterPojo> violation : errors) {
System.out.println(violation.getMessage());
}
}
}