我正在验证我的弹簧形式,因为我编写了自己的验证器。因此我无法显示我的错误代码。
我有一个模型/ pojo类。
public class Person{
private String dob;
@InHouse
private Contact contact;
//getters and setters
}
所以这里“联系”是另一个类,它有3个变量。
public class Contact{
private String mobile1;
private String mobile2;
private String mobile3;
//getters and setters
}
我所有的休眠连接都很好。
以下是我的自定义验证器。
@Override
public void validate(Object argTarget, Errors argErrors) {
Person person = (Person) argTarget;
validate(argTarget.getClass(), argErrors, person);
List<Field> inHouseAnnotationFields = AnnotationProcessor
.getAnnotatedFields(argTarget.getClass(), InHouse.class);
if (Precondition.checkNotEmpty(inHouseAnnotationFields)) {
for (Field field : inHouseAnnotationFields) {
System.out.println(field.getName());
Object obj = getValue(person, field.getName());
validate(field.getType(), argErrors, obj);
}
}
}
@SuppressWarnings("unchecked")
protected void validate(Class<?> argClass, Errors argErrors,
Object argObject) {
List<Field> calidationFieldsList = AnnotationProcessor
.getAnnotatedFields(argClass, Validation.class);
if (Precondition.checkNotEmpty(calidationFieldsList)) {
for (Field field : calidationFieldsList) {
try {
field.setAccessible(true);
Object result;
result = field.get(argObject);
Object instance = getValidatorInstance(argClass, field);
if (Precondition.checkNotNull(instance)
&& Precondition.checkNotNull(result)) {
com.rise.validation.Validation<String, String> validation = (com.rise.validation.Validation<String, String>) instance;
boolean valid = validation.validate(result.toString());
if (!valid) {
argErrors.rejectValue(field.getName(),
field.getName() + " Validation Failed");
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
在上面的代码中,“InHouse”是我的自定义注释。联系人(Person Class)变量有这个注释。
在我的输入中,我为 mobile3 字段提供了错误的电话号码。
我在这里验证每一个领域。我在使用思考。我将根据我的变量(“有效”)添加我的所有错误消息。所以,当我使用“argErrors.rejectValue(arg1,arg2)”时,我会得到一个例外情况。
org.springframework.beans.NotReadablePropertyException:bean类的无效属性“mobile3”[com.rise.common.model.Person]:Bean属性“mobile3”不可读或具有无效的getter方法: getter的返回类型与setter的参数类型匹配?
这里我的mobile3在我的“联系”课程中。在将所有错误消息添加到 argErrors 对象时,我不知道为什么会出现此异常。
任何人都可以帮助我。
注意:这里我使用反射来迭代字段。例如,首先我将遍历人字段(dob),然后我将从人获取联系人对象,然后我将迭代联系字段。
我被困在这里。请帮我解决这个问题,也是编写自定义验证器的正确方法。
Thanq, 阿玛尔。
答案 0 :(得分:1)
错误说它无法在com.rise.common.model.Person中找到属性mobile3 因为它不在那里。它的接触所以你应该改变
argErrors.rejectValue(field.getName(),
field.getName() + " Validation Failed");
到
argErrors.rejectValue("contact.mobile3 ",
field.getName() + " Validation Failed");
这是您拒绝
值的字段的嵌套路径