Java 列表中列表的ValidatorUtils

Java 列表中列表的ValidatorUtils,java,spring,validation,Java,Spring,Validation,我目前正在我的代码中进行一些验证,主要问题之一是我有一个对象列表,它有另一个对象列表等等 public class BigObject{ private Long idObject; private String idLanguage; private Date dateGeneration; private List<FirstObject> firstObject; //getters and setters } public clas

我目前正在我的代码中进行一些验证,主要问题之一是我有一个对象列表,它有另一个对象列表等等

public class BigObject{
    private Long idObject;
    private String idLanguage;
    private Date dateGeneration;
    private List<FirstObject> firstObject;
    //getters and setters

}

public class FirstObject{
    private List<SecondObject> secondObject;
    //getters and setters
}

public class SecondObject{
    private Long order;
    private String titol;
    private int floatProperty;
    //getters and setters
}
主要问题是我得到了一个
org.springframework.beans.NotReadablePropertyException:bean类的属性'order'无效
我试图猜测原因,这是因为验证器设置在BigObject类中,而不是其他类中。现在我不知道是否必须在BigObjectValidator或类似的东西中创建另一个类

编辑:

主要

试试看{
BigObject对象=新的BigObject();
List firstObj=ArrayList;
SecondObject secondObj=新的SecondObject();
getIdObject(“某物”);
object.getIdLanguage(“En”);
对象。getDateGeneration(“05-18-2018”);
secondObject.setOrder(空);
第一对象集(1,第二对象);
BeanPropertyBindingResult=新的BeanPropertyBindingResult(je.getValue(),“Object”);
BigObjectValidator validateObject=新的BigObjectValidator();
validateObject.validate(对象、结果);
if(result.hasErrors()){
System.out.println(result.getAllErrors().toString());
}
}捕获(例外e){
系统输出打印ln(e);
}
请看这里

公共接口错误存储和公开有关 特定对象的数据绑定和验证错误。字段名 可以是目标对象的属性(例如绑定到 客户对象),或子对象(例如。 “地址.街道”)。支持通过 setNestedPath(字符串):例如,AddressValidator验证 “地址”,不知道这是客户的子对象


如果将相同的Errors对象传递给validateSecondObject方法,它仍然引用原始对象,而不是第一个对象。。您必须以不同的方式对此进行验证。获取错误的新实例(例如org.springframework.validation.BindException)或手动抛出异常来执行此操作

请附上使用示例,这是一个运行时错误。另外,您显然只支持BigObject验证(由于该方法的begining中有显式强制转换),那么为什么您的supports()方法允许这些其他类呢?我转换了BigObject中以字符串形式存储的XML对象,因此为了使其简单,我手动添加了值,为了重现错误,这个方法应该有效。我这样命名是因为BigObject存储了其他类。创建另一个名为“Object”的BeanPropertyBindingResult并附加新对象解决了这个问题。谢谢
public class BigObjectValidator implements Validator {
    @Override
    public boolean supports(Class clazz) {
        return BigObject.class.equals(clazz)
        || FirstObject.class.equals(clazz)
        || SecondObject.class.equals(clazz);
    }

    @Override
    public void validate(Object obj, Errors e) {
        BigObject bigObject = (BigObject) obj;
        ValidationUtils.rejectIfEmptyOrWhitespace(e, "idObject", "empty.id");
        ValidationUtils.rejectIfEmptyOrWhitespace(e, "idLanguage", "empty.id");
        ValidationUtils.rejectIfEmptyOrWhitespace(e, "dateGeneration", "empty.id");
        if (!(bigObject.getFirstObject().isEmpty())) {
            for (FirstObject firstObject : bigObject.getFirstObject()) {
                if (firstObject.getSecondObject() != null) {
                    for (SecondObject secondObject : firstObject.getSecondObject()) {
                        if (secondObject != null){
                            validateSecondObject(secondObject,e);
                        }
                    }
                }           
            }           
        }
    }
    private void validateSecondObject(SecondObject secondObject, Errors e) {
        ValidationUtils.rejectIfEmptyOrWhitespace(e, "order", "order.empty");
        ValidationUtils.rejectIfEmptyOrWhitespace(e, "titol", "order.empty");
        ValidationUtils.rejectIfEmptyOrWhitespace(e, "floatProperty", "order.empty");
    }
}
        try{
        BigObject object = new BigObject();
        List<FirstObject> firstObj = ArrayList<FirstObject>;
        SecondObject secondObj = new SecondObject();

        object.getIdObject("something");
        object.getIdLanguage("En");
        object.getDateGeneration("05-18-2018");

        secondObject.setOrder(null);
        firstObj.set(1,secondObject);
        BeanPropertyBindingResult result = new BeanPropertyBindingResult(je.getValue(), "Object");
        BigObjectValidator validateObject = new BigObjectValidator();
        validateObject.validate(object, result);
        if (result.hasErrors()){
            System.out.println(result.getAllErrors().toString());
        }
        }catch(Exception e){
            System.out.println(e);
        }