【问题标题】:Dozer mapping two classes with mismatched argument counts推土机映射两个参数计数不匹配的类
【发布时间】:2017-02-04 05:51:24
【问题描述】:

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

我看到的所有排除示例都为第一类和第二类提供了一个参数。

【问题讨论】:

    标签: java dozer object-object-mapping


    【解决方案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 为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多