我找到了copy of my question on stackoverflow,但除了正则表达式之外没有答案。
所以我有一个带有字段“phoneNumber”的模型,它有一个验证注释@Length:
@Length(min = 3, max = 7)
private String phoneNumber;
它没有注释@NotEmpty,所以我不会检查填充它。但是hibernate给了我一个错误,长度必须是3到7.但是这个字段可能是空的......我怎么了?还是和他在一起?
答案 0 :(得分:2)
从你的另一个答案我假设你正在使用Spring MVC。
在Spring MVC中,您可以在StringTrimmerEditor
注册WebDataBinder
。
将其放入@Controller
或@ControllerAdvice
班级:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
}
从提交的表单字段中收到的所有空/空白字符串在绑定到您的表单时会自动转换为null
个
@ModelAttribute
对象。
如果您没有明确地将@Length
放在同一字段上,这会阻止@NotEmpty
(及其他约束)投诉。
答案 1 :(得分:1)
答案就是你发现的那个问题......你可能在phoneNumber中发送空字符串(“”)......因为它是一个空字符串,它验证失败(长度低于3)。如果phoneNumber为null,它可能会通过,因为它不适用于验证(除非你使用@NotNull ...)。
同样的问题有一个正常的表达式(根据autor),所以如果将null传递给phoneNumber没有帮助,这是一个很好的尝试。
答案 2 :(得分:0)
如果使用 @Length 注释该字段,则意味着您的String不能为空,因为它的长度为0.但是它可以为null,因为您没有指定 @NotNull 强>