Spring自定义验证器不起作用

时间:2016-01-12 07:52:20

标签: annotations spring-boot spring-validator

我正在尝试创建自定义验证程序,以便仅验证表单中字段的数字。

OnlyNumber.java (注释)

<FrameLayout
        android:layout_width="match_parent" // change as per your requirement
        android:layout_height="match_parent" // change as per your requirement
        android:id="@+id/linearmotel">

OnlyNumberValidator.java (验证者)

@Target({ElementType.FIELD})
@Retention(value = RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { OnlyNumberValidator.class })
public @interface OnlyNumber {

String message() default "Enter only Numbers";

 Class<?>[] groups() default {};

 Class<? extends Payload>[] payload() default {};

}

User.java (Pojo)

public class OnlyNumberValidator implements ConstraintValidator<OnlyNumber, Long> {

@Override
public void initialize(OnlyNumber o) {

}

@Override
public boolean isValid(Long str, ConstraintValidatorContext c) {

    System.out.println("Inside OnlyNumberValidator Str "+str);

    try 
    {

        //logic goes here

        return true;

    } 
    catch (Exception e) 
    {
        return false;
    }
}

}

添加了验证依赖项:

@Entity
@Table(name = "user_table")
public class User extends CommonBean {


@IgnoreMe
@Transient
private static final long serialVersionUID = 1L;

@OnlyNumber(message="Role Id Can be Only Number") //Custom Annotation
@Column(name="ROLE_ID")
private Long roleId;

........

}

项目详情: - Spring Boot 1.3.1

当我运行应用程序时,我在jsp上收到错误消息无法将类型'java.lang.String'的属性值转换为属性'roleId'的必需类型'java.lang.Long';嵌套异常是java.lang.NumberFormatException:对于输入字符串:“a”

相反,我应该得到自定义错误消息角色ID可以只是数字 当我检查我的自定义验证器的登录isValid方法时,我在方法内的参数中得到null。

配置可能有问题,或者我错过了什么

1 个答案:

答案 0 :(得分:0)

我认为你的pojo需要将roleId作为String类型。此外,验证器应为ConstraintValidator

当前代码的问题在于它已经尝试转换String - &gt;长。因此输入不是有效数字而不是设置roleId本身会失败&#34; java.lang.NumberFormatException&#34;