Spring 模拟@NotRquired注释进行验证

Spring 模拟@NotRquired注释进行验证,spring,hibernate-validator,Spring,Hibernate Validator,我使用Hibernate验证4.3.1.Final和Spring 3.2.0.RELEASE 我有一个带有字符串属性的表单。此属性不是必需的,但如果它包含某个值,则此值的长度应正好为10位。 所以我需要这样的东西: @NotRquired @Length(min = 10, max = 10) 但是没有像@NotRquired这样的注释。我应该如何为这种情况编写验证?并不是说@NotRquired注释在这种情况下没有帮助,因为所有定义的约束都会被计算。因此,在未指定值的情况下,@Length仍

我使用Hibernate验证4.3.1.Final和Spring 3.2.0.RELEASE

我有一个带有字符串属性的表单。此属性不是必需的,但如果它包含某个值,则此值的长度应正好为10位。 所以我需要这样的东西:

@NotRquired
@Length(min = 10, max = 10)
但是没有像@NotRquired这样的注释。我应该如何为这种情况编写验证?

并不是说@NotRquired注释在这种情况下没有帮助,因为所有定义的约束都会被计算。因此,在未指定值的情况下,@Length仍将被验证并失败。您可以做以下几件事:\

  • 使用@Pattern约束并定义一个与空字符串和长度为10个字符的字符串有关的模式。当然,对于非必需的情况,您会得到一个空字符串
  • 编写一个自定义约束,例如@EmptyOrLength,它满足您的需要
  • 尝试使用验证组,并将每个约束指定给不同的组。然后,您需要一种针对正确验证组的方法
  • 恢复到Hibernate验证程序特定的功能,并使用约束的布尔组合-。尽管您仍然需要自定义约束,但可以使用@ConstraintComposition(或)使用@NotNull和@Length的组合