@Size注释验证字段

时间:2016-07-06 13:03:19

标签: java validation spring-mvc jsr

我需要验证字段 - secPhoneNumber(辅助电话号码)。我需要使用JSR验证来满足以下条件

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

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

弹簧形式:

<form:label path="secPhoneNumber">
Secondary phone number <form:errors path="secPhoneNumber" cssClass="error" />
</form:label>
<form:input path="secPhoneNumber" />

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

2 个答案:

答案 0 :(得分:1)

以下模式工作

  1. @Pattern(正则表达式=&#34; ^(\ S * | [A-ZA-Z0-9] {10})$&#34)
  2. @Pattern(正则表达式=&#34; ^(\ S * | \ d {10})$&#34)
  3. // ^             # 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}    # a-z,A-Z,0-9, exactly 10 times
    // $             # End of the line
    

    参考:Validate only if the field is not Null

答案 1 :(得分:1)

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

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

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

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

    public class NotEmptyConstraintValidator implements      ConstraintValidator<notEmptyMinSize, String> {
    
         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();
        }
    
    }
    
  4. 现在,您可以在不同大小的多个字段中使用此验证。

    这是另一个例子,您可以关注example