复杂对象的推土机映射

问题描述 投票:0回答:1

我有2个POJO,如下所示:

public class SourceObj {

protected String name;
...
...
10 String objects

protected AddressesSrc addressesSrc; 

...
...
getter and setter for all fields

}

public class AddressesSrc {
 protected List<AddressSrc> addressSrc;
...
getters and setters
}

public class AddressSrc {
   protected String city;

   protected List<ContactSrc> contactSrc;

...

getters & setters
}

public class DestObj {

protected String name;
...
...
10 String objects

protected AddressesDest addressesDest; 

...
...
getter and setter for all fields

}

public class AddressesDest {
 protected List<AddressDest> addressDest;
...
getters and setters
}

public class AddressDest {
   protected String city;

   protected List<ContactDest> contactDest;

...

getters & setters
}

现在,我具有如下dozer-configuration.xml:

<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozer.sourceforge.net" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://dozer.sourceforge.net http://dozer.sourceforge.net/schema/beanmapping.xsd">
    <configuration>
        <stop-on-errors>true</stop-on-errors>
        <trim-strings>true</trim-strings>
        <relationship-type>non-cumulative</relationship-type>       
    </configuration>

    <mapping>
        <class-a>SourceObj</class-a>
        <class-b>DestObj</class-b>      
    </mapping>
</mappings>

现在,上面的映射将诸如name之类的字段从SourceObj复制到DestObj,但无法将AddressSrc列表映射到AddressDest列表。同样在Address对象中,有一个Contact对象的列表。

我发现的一个解决方案是编写一个自定义转换器,它将一个一个地复制原始字段值,然后将所有对象从一个列表复制到另一个目标列表。

但是我正在寻找一种解决方案,如果字段名称与原始值相同,则将自动复制它们,并且需要使用其他某种机制来复制列表对象。同样,我有很多嵌套列表对象。

请为这种情况提供解决方案。

java converters dozer
1个回答
0
投票

推土机将映射任何具有相同名称并自动键入的内容。当您要映射的字段具有不同的名称时,您必须在映射中明确告诉Dozer,哪些字段要相互映射。在上面的问题中,AddressSrc和AddressDest是具有不同名称的字段。因此,您必须明确告知Dozer将这两个字段相互映射。

<mapping>
    <class-a>SourceObj</class-a>
    <class-b>DestObj</class-b>    
    <field>
        <a>addressesSrc</a>
        <b>addressesDest</b>
    </field>  
</mapping>

您可能需要其他映射说明才能获得最终想要的结果。但是,由于这两个字段具有不同的名称,因此这是您需要让Dozer映射这两个字段所缺少的映射部分。

© www.soinside.com 2019 - 2024. All rights reserved.