gpt4 book ai didi

java - JSR-303 验证的@NotNull 说明

转载 作者:行者123 更新时间:2023-11-30 06:21:27 27 4
gpt4 key购买 nike

我有一个带有 JSR-303 注释的 POJO。它的一些属性是其他 POJO。我希望内部 POJO 为 @Valid,前提是它们不为空。但如果它们为空,那就没问题了。不幸的是,我没有成功地做到这一点,因此如果内部 POJO 属性为 null,Java 就会向我返回错误。

@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;
}

我希望 externalPojo 在以下情况下有效:

  1. attributeA 不为 null,attributeB 为 null;
  2. attributeB 不为空且 attributeB 不为空且有效。

因此,我希望仅当内部 pojo 不为 null 时,才遵守对内部 pojo 属性的约束。

我尝试将 @Nullable 添加到 attributeB 但没有效果。我该如何解决这个问题?

最佳答案

只要添加 @Valid 就意味着如果不为 null 则有效。 Section 3.5.1 JSR 303:Bean Validation 规范规定在验证对象图时“忽略空引用”。

我使用 Hibernate Validator 6.0.2.Final 和这个简单的测试类验证了这一点。

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());
}
}
}

关于java - JSR-303 验证的@NotNull 说明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48079067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com