首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dozer -映射集合

Dozer -映射集合
EN

Stack Overflow用户
提问于 2014-04-22 17:19:47
回答 2查看 1.2K关注 0票数 0

我有一个类似于以下两个类的场景:

代码语言:javascript
复制
public class Person {
    private String name;
    private Set<Person> familyMembers;
    //constructors & getters and setters
}

Person类是我的源类。我正在尝试使用Dover将这个类映射到以下目标类:

代码语言:javascript
复制
public class PersonPrime {
    private String personName;
    private FamilyMembers familyMembers;
    //constructors & getters and setters
}

public class FamilyMembers {
    private List<PersonPrime> familyMembers;
    //constructors & getters and setters
}

我的实际场景中的目标类是由JAXB生成的(使用我创建的XSD)。XSD是规定的,我不能真正更改它们,因此不能更改目标类。我目前能够映射我的mappings XML文件中的原语,但是我不能映射集合。

您知道如何使用推土器将Person对象映射到PersonPrime类型的对象吗

EN

回答 2

Stack Overflow用户

发布于 2015-06-02 03:29:18

默认情况下,JaxB不会为"FamilyMembers“类型中的集合生成setter。当推土机试图调用不存在的设置器时,这将导致在推土机内部深处出现空指针异常(在推土机5.4.0中为org.dozer.util.ReflectionUtils.java:323)。为了避免这种情况,您需要在集合字段上设置is-accessible true,这将导致它直接设置familyMembers.familyMembers字段。因此,下面修改了谁应该工作的映射:

代码语言:javascript
复制
<mapping>
  <class-a>Person</class-a>
  <class-b>PersonPrime</class-b>
  <field>
    <a>name</a>
    <b>personName</b>
  </field>
  <field>
    <a>familyMembers</a>
    <b is-accessible="true">familyMembers.familyMembers</b>
  </field>
</mapping>
票数 2
EN

Stack Overflow用户

发布于 2014-04-24 12:46:01

下面的映射是有效的。

<mapping> <class-a>Person</class-a> <class-b>PersonPrime</class-b> <field> <a>name</a> <b>personName</b> </field> <field> <a>familyMembers</a> <b>familyMembers.familyMembers</b> </field> </mapping>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23215406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档