使用@Length注释并且没有@NotEmpty注释的Hibernate验证器验证字段

时间:2014-08-12 17:21:30

标签: java hibernate validation

我找到了copy of my question on stackoverflow,但除了正则表达式之外没有答案。

所以我有一个带有字段“phoneNumber”的模型,它有一个验证注释@Length:

@Length(min = 3, max = 7)
private String phoneNumber;

它没有注释@NotEmpty,所以我不会检查填充它。但是hibernate给了我一个错误,长度必须是3到7.但是这个字段可能是空的......我怎么了?还是和他在一起?

3 个答案:

答案 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