ValidatorUtils списка внутри списка - PullRequest
0 голосов
/ 18 мая 2018

В настоящее время я выполняю некоторые проверки в своем коде, и одна из основных проблем заключается в том, что у меня есть список объектов, у которого есть другой список объектов и т. Д.

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
}

Это мои классы и ихвнутри другого.Я настроил свой валидатор в главном и создал соответствующий класс, теперь в классе валидатора у меня есть это:

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");
    }
}

Основная проблема в том, что я получаю org.springframework.beans.NotReadablePropertyException: Invalid property 'order' of bean class Я пытаюсьугадайте, почему это так, потому что валидатор установлен в классе BigObject, а не в других.Теперь я не знаю, нужно ли мне создавать другой класс внутри BigObjectValidator или что-то в этом роде.

Редактировать:

Main

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

1 Ответ

0 голосов
/ 18 мая 2018

Пожалуйста, посмотрите здесь https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/Errors.html

public interface Errors Хранит и предоставляет информацию об ошибках привязки данных и проверки для конкретного объекта .Имена полей могут быть свойствами целевого объекта (например, «имя» при привязке к объекту клиента) или вложенными полями в случае подобъектов (например, «address.street»).Поддерживает навигацию по поддереву через setNestedPath (String): например, AddressValidator проверяет «адрес», не зная, что это подобъект клиента.

Если вы передаете тот же объект Errors в свой метод validateSecondObject, он по-прежнему ссылается на исходный объект, а не на ваш первый объект. Вы должны проверить это по-другому.Либо получите новый экземпляр ошибок (например, org.springframework.validation.BindException), либо сделайте это вручную, вызвав исключения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...