您好,在我的春季网络应用程序中,我有一个密码变量,我想要至少0个字符或者大于6个字符且小于20个字符。我知道有注释:
@Size(min=6, max=20)
但我不知道如何增加密码可以是0个字符的可能性。有人会帮我这个吗?
答案 0 :(得分:7)
如果您想要一个空(“”)或长度在6到20个字符之间的字符串,您可以使用@Pattern
约束指定正则表达式:
@Pattern(regexp="(^$|.{6,20})")
答案 1 :(得分:6)
鉴于评论,您可以使用StringTrimmerEditor
将空字符串转换为空,然后@Size
检查不会触发(在@Size中,null被视为有效)。
在您的控制器中添加以下方法:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
请注意,StringTrimmerEditor
也会修剪空格中的输入,如果您只想让一个属性受此编辑器影响,请使用registerCustomEditor(Class<?> requiredType, String propertyPath, PropertyEditor propertyEditor)
。
答案 2 :(得分:1)
我认为你想要一个可以为空的字段,但也可以是min = 6
和max = 20
。 AFAIK,@Size
只应在字段为非空时激活。
如果您要发送空字符串""
,则会对其进行验证。
答案 3 :(得分:1)
至少在Hibernate Validator 5中,您可以使用ConstraintComposition。