В настоящее время я делаю некоторые проверки в своем коде, и одна из основных проблем заключается в том, что у меня есть список объектов, в котором есть другой список объектов, и так далее.
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 или что-то в этом роде.
Редактировать:
Основной
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);
}
Я преобразовываю объект XML, хранящийся в строке внутри BigObject, поэтому для упрощения я добавил вручную значения, это обязательно должно работать, чтобы воспроизвести ошибку. Я назвал его так, потому что BigObject хранил другие классы.




Пожалуйста, посмотрите здесь https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/validation/Errors.html
public interface Errors Stores and exposes information about data-binding and validation errors for a specific object. Field names can be properties of the target object (e.g. "name" when binding to a customer object), or nested fields in case of subobjects (e.g. "address.street"). Supports subtree navigation via setNestedPath(String): for example, an AddressValidator validates "address", not being aware that this is a subobject of customer.
Если вы передадите тот же объект Errors вашему методу validateSecondObject, он по-прежнему будет ссылаться на исходный объект, а не на ваш firstObject. Вы должны проверить это по-другому. Либо получите новый экземпляр ошибок (например, org.springframework.validation.BindException), либо сделайте это, вручную выбрасывая исключения
Создание другого BeanPropertyBindingResult с именем «Object» и присоединением нового объекта решает проблему. Спасибо
пожалуйста, приложите пример использования, это ошибка времени выполнения. Кроме того, вы явно поддерживаете только проверку BigObject (из-за явного приведения в начале метода), так почему ваш метод supports () допускает эти другие классы?