java - 列表内列表的ValidatorUtils
问题描述
我目前正在我的代码中进行一些验证,主要问题之一是我有一个对象列表,其中包含另一个对象列表等等。
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
}
这些是我的课程,它们在另一个课程中。我在 Main 中设置了我的验证器并创建了它们各自的类,现在,在验证器类中我有这个:
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);
}
解决方案
公共接口 Errors 存储和公开有关特定对象的数据绑定和验证错误的信息。字段名称可以是目标对象的属性(例如,绑定到客户对象时的“名称”),或者是子对象情况下的嵌套字段(例如“address.street”)。支持通过 setNestedPath(String) 进行子树导航:例如,AddressValidator 验证“地址”,而不知道这是客户的子对象。
如果您将相同的 Errors 对象传递给您的 validateSecondObject 方法,它仍然引用原始 obj,而不是您的 firstObject。您必须以不同的方式验证它。要么获取一个新的错误实例(例如 org.springframework.validation.BindException),要么通过手动抛出异常来完成
推荐阅读
- javascript - 突出显示具有空值的行 - jQuery(未按预期工作)
- ios - 如何识别没有 Home 键的 iPad?
- docker - 无法在 redhat 上的浏览器中访问 docker 容器
- android - 异常recyclerview cardview
- postman - 使用 Postman 的其他环境
- webpack - eslint-loader/index.js 无法读取 null 的属性“范围”
- c# - C# SQL 查询 - 如果语句失败
- c# - 如何从 Unity 中的函数返回多个值?
- nativescript - 允许将应用数据下载到 iCloud (Nativescript)
- css - 如何设置输入类型“时间”的样式