【问题标题】:Hibernate validator validate field with @Length annotation and without @NotEmpty annotationHibernate 验证器验证带有 @Length 注释和没有 @NotEmpty 注释的字段
【发布时间】:2014-10-05 21:07:29
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java hibernate validation


    【解决方案1】:

    从您的其他答案中,我假设您使用的是 Spring MVC。

    在 Spring MVC 中,您可以在 WebDataBinder 中注册 StringTrimmerEditor

    将其放入您的 @Controller@ControllerAdvice 类中:

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
    }
    

    并且所有从提交的表单字段收到的空/空白字符串在绑定到您的 @ModelAttribute 对象。

    如果您没有将@NotEmpty 明确放在同一字段上,这将防止@Length(和其他约束)抱怨。

    【讨论】:

      【解决方案2】:

      如果您使用 @Length 注释该字段,则意味着您的 String 不能为空,因为它的长度将为 0。但是它可以为 null,因为您没有指定 @NotNull

      【讨论】:

      • 你的回答意味着我不能检查字段的长度,直到它可能是空的 - 这不是很好,我认为你错了。
      • 对不起,你能澄清我为什么错了吗?你的例子证明了这种情况。实际上,我指出的与@Dalton 相同。传递空字符串对您的情况没有帮助,因此请改为传递空值。如果您在后端收到空字符串,只需执行 if 检查并将属性设置为 null。如果您将 json 发送到后端,只需不要 json 中的字段,您将在映射中收到 null
      • 再次。当我使用表单并使用没有任何js的按钮类型提交时,如何将空值而不是空字符串传递给字段?
      • 实际上,在某种形式下你不能。如果该字段为空,您将始终发送空字符串。但是,由于您的语义说空字符串应该被视为null,因此您可以在服务器中对其进行控制,如果接收到空字符串,则在模型中放置一个空值
      • 给我一个建议。在什么具体步骤上我必须将空字符串(“”)更改为空?当我从对象 BindingResult 检索结果时,在服务器端(在控制器中)使用“if then else”检查它 - 无论如何这都是不好的方式
      【解决方案3】:

      答案就在您发现的那个问题中……您可能在 phoneNumber 中发送空字符串 ("")……因为它是一个空字符串,它无法通过验证(长度小于 3)。如果 phoneNumber 为 null 它可能会通过,因为它不申请验证(除非您使用 @NotNull...)。

      同样的问题有一个有效的正则表达式(根据作者的说法),所以如果将 null 传递给 phoneNumber 没有帮助,这是一个很好的尝试。

      【讨论】:

      • 请告诉我,如果我有一个按钮类型“提交”,它在没有任何 javascript 的情况下工作,我如何在表单中传递 null?
      • 嗨 dikkini,我看到了你与 @ipinyol 的聊天,我将推荐相同的内容。只需检查字符串是否为空,如果是,则将其设置为null。
      猜你喜欢
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 2010-10-04
      • 2016-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多