我正在使用Dozer进行对象映射。一切都很好,只是因为我无法映射这个特定的东西。
<mapping>
<class-a>User</class-a>
<class-b>UAUserBean</class-b>
<field>
<a>RightLst.Right</a>
<b>Rights</b>
<a-hint>Right</a-hint>
<b-hint>UARightBean</b-hint>
</field>
<field>
<a>RightLst.NumInLst</a>
<b>Rights.length</b>
</field>
</mapping>
//here RightLst is an object of a class and numInLst (int prop)
//rights is an array of objects
我想做的是
lUser.getRightLst().setNumInLst(uaUserBean.getRights().length);
有什么建议吗?
提前致谢。
User{
protected RightLst rightLst;
}
RightLst{
protected Integer numInLst;
protected Collection right = new ArrayList();
}
public class UAUserBean{
private UARightBean[] rights;
}
答案 0 :(得分:0)
执行此操作时:
...
<b>rights.length</b>
</field>
Dozer将尝试访问rights
数组的第一个位置,并在 UARightBean
的实例上调用 length 属性的getter (这是数组的类型),显然 UARightBean
中不存在 length 属性,Dozer会抛出异常。
我建议在 UAUserBean
中创建一个getter方法来返回rights
属性的长度,它看起来像这样:
class UAUserBean {
...
public int getRightsLength() {
return rights != null ? rights.length : 0;
}
}
映射文件:
<class-a>User</class-a>
<class-b>UAUserBean</class-b>
<field>
<a>rightLst.numInLst</a>
<b>rightsLength</b>
</field>
如果您无法修改 UAUserBean
,那么您的最后一个选项就是从UARightBean[]
到Integer
的自定义转换器,但它看起来很难看。< / p>