我正在尝试创建自定义验证程序,以便仅验证表单中字段的数字。
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。
配置可能有问题,或者我错过了什么
答案 0 :(得分:0)
我认为你的pojo需要将roleId作为String类型。此外,验证器应为ConstraintValidator
当前代码的问题在于它已经尝试转换String - &gt;长。因此输入不是有效数字而不是设置roleId本身会失败&#34; java.lang.NumberFormatException&#34;