【问题标题】:@Size(min, max) but not required@Size(min, max) 但不是必需的
【发布时间】:2012-07-18 21:03:53
【问题描述】:

嗨,在我的 spring webapp 中,我有一个密码变量,我希望它至少为 0 个字符或大于 6 且小于 20。我知道有注释:

 @Size(min=6, max=20)

但我不知道如何添加密码可以是 0 个字符的可能性。有人会帮我解决这个问题吗?

【问题讨论】:

  • 您想要要么空密码或 6到20个字符长度,对吗?你在 Spring MVC Controller 中使用 hibernate-validator 吗?

标签: java spring hibernate-validator


【解决方案1】:

给定注释,你可以使用StringTrimmerEditor将空字符串转换为null,然后@Size检查不会触发(null在@Size中被认为是有效的)。

在您的控制器中添加以下方法:

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

请注意,StringTrimmerEditor 也会从空格中修剪输入,如果您只希望此编辑器影响一个属性,请使用 registerCustomEditor(Class<?> requiredType, String propertyPath, PropertyEditor propertyEditor)。

【讨论】:

  • 它的工作谢谢。但是你能给我写一个变量propertyPath的例子吗?它只是控制器中输入或变量的名称吗?
【解决方案2】:

如果您想要一个空 ("") 或长度介于 6 到 20 个字符之间的字符串,您可以使用 @Pattern 约束指定正则表达式:

@Pattern(regexp="(^$|.{6,20})")

【讨论】:

  • 我接受了之前的答案,因为它正在工作并且更早,但感谢您提供此解决方案。
  • 优雅,但您无法获取(本地化)消息中的最小值和最大值。
  • @PierreHenry 你可以像这样生成自定义@Pattern(regexp="(^$|.{5,15})", message="长度应该在 5 到 15 之间")跨度>
  • @Gunnar 如何避免相同模式中的空白字符串?
  • 我建议在 @Pattern 旁边添加一个 @NotBlank 约束(它是 HV 5.x 的一部分,也是 Bean Validation 2.0 规范的一部分)。
【解决方案3】:

我认为您想要一个可为空的字段,但也可以是 min = 6 和 max = 20。 AFAIK,@Size 仅应在字段非空时激活。

如果您发送的是空字符串"",它将被验证。

【讨论】:

    【解决方案4】:

    至少在 Hibernate Validator 5 中,您可以使用ConstraintComposition。

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 2023-03-19
      相关资源
      最近更新 更多