我似乎找不到能够区分这三个注释之间区别的摘要。
@NotNull
:CharSequence,Collection,Map或Array对象 不为null ,但 可以 为空。
@NotEmpty
:CharSequence,Collection,Map或Array对象不为null, 并且size > 0。
@NotBlank
:字符串不为null ,并且修剪后的长度大于零 。
为了帮助您理解,让我们研究一下如何定义和执行这些约束(我使用的是4.1版):
@NotNull
约束被定义为: @Constraint(validatedBy = {NotNullValidator.class})
此类的isValid
方法定义为:
public boolean isValid(Object object, ConstraintValidatorContext constraintValidatorContext) {
return object != null;
}
@NotEmpty
约束被定义为: @NotNull
@Size(min = 1)
因此,此约束 使用@NotNull
上面的约束, 并且 @Size
其定义因对象而异,但应该是自说明的。
@NotBlank
约束定义为: @NotNull
@Constraint(validatedBy = {NotBlankValidator.class})
因此,此约束还使用了@NotNull
约束,但也约束了NotBlankValidator类。此类的isValid
方法定义为:
if ( charSequence == null ) { //curious
return true;
}
return charSequence.toString().trim().length() > 0;
有趣的是,如果字符串为null,则此方法返回true,但仅当修剪后的字符串的长度为0时,此方法才返回false。如果为null,则返回true是可以的,因为正如我提到的,@NotEmpty
定义也需要@NotNull
。
这里有一些例子:
字符串名称= null;
@NotNull
:错误
@NotEmpty
:错误
@NotBlank
:错误
字符串名称=“”;
@NotNull
: 真
@NotEmpty
:假
@NotBlank
:假
字符串名称=“”;
@NotNull
: true
@NotEmpty
: true
@NotBlank
:false
字符串名称=“好答案!”;
@NotNull
: true
@NotEmpty
: true
@NotBlank
: true
问题内容: 我在JSF托管bean中使用了Hibernate Validation批注。当我使用时,或者它们似乎没有以任何方式被触发。 视图: 这是怎么引起的,我该如何解决? 问题答案: 介绍 由于您未对使用的是哪个容器的问题发表评论,因此我在您的问题历史记录中进行了了解,以了解所有使用的容器。到目前为止,我只找到了Tomcat。因此,对于这个答案,我将假设您确实使用了我最初在发布评论时所猜测的T
问题内容: 我只是想知道为什么我们通常在两个布尔之间使用逻辑OR 而不是按位OR ,尽管它们都运行良好。 我的意思是,请看以下内容: 我们可以代替使用吗?与和相同。 问题答案: 如果您使用和形式,而不是这些运算符的和形式,则Java不会费心地单独评估右手操作数。 这是您是否希望缩短评估时间的问题-在 大多数情况 下都是如此。 说明短路好处的一个好方法是考虑以下示例。 正如Jeremy和Peter提
问题内容: 我在看一些模拟的OCJP问题。我遇到了一个非常令人困惑的语法。这里是: 为什么输出在和之间变化? 问题答案: 问题只是和您玩弄混乱的空格。 是通常的(不等于)比较。 另一方面: 最好写成如下形式: 因此,这是两个运算符。 首先反转。 然后将其分配回。 赋值运算符返回分配的值。因此,计算结果为true-这就是您要打印的内容。
只需在Xpath中添加即可--它突出显示--各种页面元素----它表示什么? 下面是用于Gmail密码字段的XPaths。的意义是什么? >
我对Angularjs很陌生。谁能解释一下这些AngularJS运算符之间的区别:用适当的例子隔离作用域。
问题内容: 通过Firebug查找相对的XPath时: ---------如果我们一开始不使用点表示什么呢? 只需添加Xpath-它突出显示—各种页面元素----------这意味着什么? 以下是XPaths for Gmail密码字段。的意义是什么? 问题答案: 这些表达式都选择不同的节点集: .//*[@id=’Passwd’] “。” 在开始处表示当前处理 在当前节点处开始 。“ *”选择从