我是Dozer的新手并拥有这三个类
class PersonEntity {
Set<AddressEntity> addresses;
}
class Person {
AddressList addresses;
}
class AddressList {
List<Address> address;
}
有没有办法为此编写推土机映射?
这是我到目前为止所拥有的
<mapping>
<class-a>domain.entity.AddressEntity</class-a>
<class-b bean-factory="org.dozer.factory.JAXBBeanFactory">
com.rackspace.customer.Address
</class-b>
<field>
<a get-method="isPrimary">isPrimary</a>
<b set-method="setPrimary">primary</b>
</field>
</mapping>
<mapping>
<class-a>domain.entity.PersonEntity</class-a>
<class-b bean-factory="org.dozer.factory.JAXBBeanFactory">com.rackspace.customer.Contact</class-b>
<field>
<a>userId</a>
<b>username</b>
</field>
<field custom-converter="domain.converter.PersonNumberAdapter">
<a>personNumber</a>
<b>contactNumber</b>
</field>
<field>
<a>addresses</a>
<b>addresses.address</b>
<a-hint>domain.entity.AddressEntity</a-hint>
<b-hint>com.rackspace.customer.Address</b-hint>
</field>
</mapping>
如何告诉第二个映射器重用现有映射器将AddressEntity转换为Address,反之亦然? 这不起作用,有人可以帮助我吗?
答案 0 :(得分:0)
<b is-accessible="true">addresses.address</b>
Ok经过一个小时的调试后我发现它试图访问我的setter方法来设置值,因为我的JAXB对象没有任何setter,它失败了。
一旦我添加了is-accessible to true,它就像魅力一样。
来自Dozer FAQ
在映射字段时是否会调用getter和setter方法?
是。您可以通过显式指定is-accessible =&#34; true&#34;来绕过此默认行为。对于任何映射。如果指定了is-accessible,则直接访问字段(包括私有字段)并绕过getter / setter方法。除非您正在处理不包含任何getter或setter方法的非正统数据对象,否则不建议您设置is-accessible =&#34; true&#34 ;.