推土机:将字段映射到功能输出

时间:2012-08-07 13:57:52

标签: java dozer

我正在使用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;
}

1 个答案:

答案 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>