@Size注释validation字段

我需要validation字段 – secPhoneNumber(辅助电话#)。 我需要使用JSRvalidation来满足以下条件

  • 该字段可以为空/ null
  • 否则,数据长度必须为10。

我试过下面的代码。 该字段始终在表单提交时得到validation。 如果字段不为空,如何validation字段长度为10?

弹簧forms:

Secondary phone number

 @Size(max=10,min=10) private String secPhoneNumber; 

我认为为了便于阅读并在将来使用我将创建自定义validation类,您只需按照以下步骤操作:

  1. 将新的自定义注释添加到您的字段中

     @notEmptyMinSize(size=10) private String secPhoneNumber; 
  2. 创建自定义validation类

     @Documented @Constraint(validatedBy = notEmptyMinSize.class) @Target( { ElementType.METHOD, ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface notEmptyMinSize { int size() default 10; Class[] groups() default {}; Class[] payload() default {}; } 
  3. 将您的业务逻辑添加到validation中

     public class NotEmptyConstraintValidator implements ConstraintValidator { private NotEmptyMinSize notEmptyMinSize; @Override public void initialize(notEmptyMinSize notEmptyMinSize) { this.notEmptyMinSize = notEmptyMinSize } @Override public boolean isValid(String notEmptyField, ConstraintValidatorContext cxt) { if(notEmptyField == null) { return true; } return notEmptyField.length() == notEmptyMinSize.size(); } } 

现在,您可以在具有不同大小的多个字段中使用此validation。

这是另一个例子,你可以按照例子

以下模式工作

  1. @Pattern(正则表达式= “^(\ S * | [A-ZA-Z0-9] {10})$”)
  2. @Pattern(正则表达式= “^(\ S * | \ d {10})$”)
 // ^ # Start of the line // \s* # A whitespace character, Zero or more times // \d{10} # A digit: [0-9], exactly 10 times //[a-zA-Z0-9]{10} # az,AZ,0-9, exactly 10 times // $ # End of the line 

参考: 仅在字段不为空时才进行validation