推土机映射两个参数计数不匹配的类

时间:2016-09-26 19:01:49

标签: java dozer object-object-mapping

我有两个bean,一个有五个属性,另一个有四个。如果我只想忽略额外属性,如何配置映射?

我看到的所有排除示例都对第一类和第二类都进行了论证。

1 个答案:

答案 0 :(得分:1)

你不应该做任何事情;推土机应该开箱即用。

考虑以下两个bean:

<强> Source.java

public class Source {

    private String field1;
    private String field2;
    private String field3;

   // Getters and setters omitted

}

<强> Destination.java

public class Destination {

    private String field1;
    private String field2;

    // Getters and setters omitted

}

您可以在dozer.xml文件中使用以下映射(这将映射两个bean中名称匹配的所有属性):

<mapping>
    <class-a>com.example.Source</class-a>
    <class-b>com.example.Destination</class-b>
</mapping>

以下单元测试表明映射有两种方式:

    @Test
    public void sourceToDestination() {
        List<String> mappingFiles = new ArrayList<String>();
        mappingFiles.add("dozer.xml");
        this.beanMapper = new DozerBeanMapper(mappingFiles);

        Source source = new Source();
        source.setField1("A");
        source.setField2("B");
        source.setField3("C");

        Destination dest = beanMapper.map(source, Destination.class);
        assertEquals("A", dest.getField1());
        assertEquals("B", dest.getField2());
    }

    @Test
    public void destinationToSource() {
        List<String> mappingFiles = new ArrayList<String>();
        mappingFiles.add("dozer.xml");
        this.beanMapper = new DozerBeanMapper(mappingFiles);

        Destination dest = new Destination();
        dest.setField1("A");
        dest.setField2("B");

        Source source = beanMapper.map(dest, Source.class);
        assertEquals("A", source.getField1());
        assertEquals("B", source.getField2());
        assertNull(source.getField3());
    }

当我们将Source映射到Destination时,由于Destination没有名为field3的属性,它将被忽略。当我们映射另一种方式(Destination to Source)时,Source中的field3为空。