Integer 字段的 Bean 验证

sql*_*mmy 5 java hibernate-validator bean-validation

我正在尝试对该字段进行约束验证,如果输入不是整数,则必须拒绝。

public class ClientTO {
       private Integer phone_num; //
}
Run Code Online (Sandbox Code Playgroud)

我试过:

1) @Digits- 它不验证输入是否为整数,因为您可以看到仍然抛出类型不匹配异常。

2)我的自定义验证 - 这似乎不适用于Integer字段

错误:

Exception in thread "main" javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer.
Run Code Online (Sandbox Code Playgroud)

我的自定义验证类:

public class X_CVAImpl implements ConstraintValidator<X_CustomValidatorAnnotation,String>{  
    public boolean isValid(String value, ConstraintValidatorContext context) {
        // TODO Auto-generated method stub
        boolean val_d;
        if (value.matches("[0-9]+") && value.length() ==10) {
            val_d=true;
        }else {
            val_d=false;            
        }
        return val_d;
    }
}
Run Code Online (Sandbox Code Playgroud)

请问有什么帮助吗?

dir*_*cke 7

@Digits 仅适用于原始类型。因此,如果您将实体更改为以下内容,您的验证应该会启动。

public class ClientTO {
   @Digits(integer=10, fraction=0)
   private int phone_num; // Constraint: phone_num can only be 10 digits long or less
   ...
}
Run Code Online (Sandbox Code Playgroud)

话虽如此,我相信您应该使用字符串来验证电话号码。

public class ClientTO {
   @Size(min=10, max=10)
   @Pattern(regexp="(^[0-9]{10})")
   private String phone_num; // Constraint: phone_num would match 10 digits number
   ...
}
Run Code Online (Sandbox Code Playgroud)