整数字段的Bean验证

时间:2018-11-15 14:09:29

标签: java bean-validation hibernate-validator

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

public class ClientTO {
       private Integer phone_num; //
}

我尝试过:

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

2)我的自定义验证-在Integer字段上似乎无效

错误:

Exception in thread "main" javax.validation.UnexpectedTypeException: HV000030: No validator could be found for type: java.lang.Integer.

我的自定义验证类:

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;
    }
}

请帮忙吗?

1 个答案:

答案 0 :(得分:3)

@Digits will only work for primitive types。 因此,如果您将实体更改为以下内容,则应该开始进行验证。

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

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

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
   ...
}