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