java / beans validation - collection / map不包含空值

时间:2015-01-16 12:37:48

标签: java null bean-validation notnull

@NotNull注释验证某个对象不为空。

@NotEmpty注释验证某个集合/ map / string / ...不为空。

是否还有一个注释可以保证某个集合/映射不包含任何空值?我无法找到它。它看起来很基本,我相信必须在JSR-303规范中。

3 个答案:

答案 0 :(得分:6)

Per the Hibernate 5.2 release announcement,Hibernate Validator 5.2提供了将验证注释添加到Iterable的泛型类型的功能,例如: List<@MyValidationAnnotation String> myList;。但是,您当前无法使用现有的验证注释,因为它们的定义中没有“java.lang.annotation.ElementType.TYPE_USE”。听起来这仍然是一个关于Bean Validation 1.2将如何或是否支持这一点的开放性问题。

因此,简而言之,如果您使用Java 8和Hibernate作为bean验证库,则可以在其定义中使用TYPE_USE编写自己的@NotNull验证注释,并将其应用于列表的泛型类型。否则,Hardy关于编写自己的自定义约束以验证列表的每个元素都是非空的答案可能是实现此目的的方法。

更新

版本2.0中的Bean Validation API将TYPE_USE作为验证程序中的目标。因此,人们可以轻松地List<@NotNull String> stringList

答案 1 :(得分:2)

没有这样的内置约束。您可以轻松编写自定义约束,例如@NoNullElements,它可以满足您的需求。请参阅文档http://docs.jboss.org/hibernate/stable/validator/reference/en-US/html_single/#validator-customconstraints以了解如何编写自定义约束。

答案 2 :(得分:0)

我遇到了同样的问题。我找到的唯一解决方案是在实体的setter中添加一个null验证。如果提交的值为null - >返回。我知道那很难看,但这是我知道如何避免异常的唯一方法。