Javax和Hibernate验证是否意味着NotNull?

时间:2014-12-02 20:00:18

标签: java annotations bean-validation hibernate-validator

支持的Javax验证列表为here

支持的Hibernate Validations列表(扩展Javax)是here

这些注释中的每一个都“延伸”或暗示@NotNull吗?

例如,如果我注释以下实体:

public class Widget {
    @Email
    private String email;

    @URL
    private String website;

    // etc...
}

@Email@URL是否也强制执行@NotNull?或者,如果为特定的Widget实例定义了这些属性,它们是否只是应用/强制执行

哪些注释扩展/暗示@NotNull,哪些注释不?这些注释是否还有其他隐含的关系?

1 个答案:

答案 0 :(得分:3)

没有。例如,如果您从hibernate验证器查看source codeEmailValidator,它会在isValid()方法的开头包含此代码:

if ( value == null || value.length() == 0 ) {
    return true;
}

URLValidator相同,依此类推。通常,当您尝试验证null值时,相应注释的所有验证器都会将值视为有效,因此一个好的经验法则是始终分别执行非空验证。

修改:这是JSR-303 specification与此问题相关的引用:

  

虽然不是强制性的,但分割它是一种很好的做法   非空约束验证的核心约束验证   (例如,@ Email约束将在null对象上返回true,   即不会处理@NotNull验证)