有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Spring MVC自定义验证程序

我正在验证我的spring表单,因为我编写了自己的验证器。因为我无法显示我的错误代码

我有一门模特课

public class Person{
    private String dob;

    @InHouse
    private Contact contact;

   //getters and setters
}

这里“Contact”是另一个类,它有3个变量

public class Contact{
  private String mobile1;
  private String mobile2;
  private String mobile3;

  //getters and setters
}

我所有的hibernate连接都很好

下面是我的自定义验证器

    @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();
            }
        }
    }
}

在上面的代码中,“内部”是我的自定义注释。联系人(Person类)变量具有此注释

在我的输入中,我为mobile3字段输入了一个错误的电话号码

我正在验证这里的每一个领域。这里我使用的是反射。我将根据变量(“Valid”)添加所有错误消息。所以,当我使用“argErrors.rejectValue(arg1,arg2)”时,我得到了一个异常,比如

org。springframework。豆。NotReadablePropertyException:bean类[com.rise.common.model.Person]的无效属性“mobile3”:bean属性“mobile3”不可读或具有无效的getter方法:getter的返回类型是否与setter的参数类型匹配

这是我的手机3在我的“联络”课上。我不知道为什么在将所有错误消息添加到argErrors对象时出现此异常

有人能帮我吗

注意:这里我使用反射来迭代字段。例如,首先我将迭代字段(dob),然后我将从获取联系人对象,然后我将迭代联系人字段

我被困在这里了。请在这方面帮助我,这也是编写自定义验证程序的正确方法吗

坦克, 阿马尔


共 (1) 个答案

  1. # 1 楼答案

    错误表示在com中找不到属性mobile3。上升常见的模型人 因为它不在里面。这是接触,所以你应该改变

    argErrors.rejectValue(field.getName(),
                                    field.getName() + " Validation Failed");
    

    argErrors.rejectValue("contact.mobile3 ",
                                    field.getName() + " Validation Failed");  
    

    这是要拒绝其值的字段的嵌套路径