Dozer отображает два класса с несовпадающим количеством аргументов

У меня есть два компонента, один из которых имеет пять атрибутов, а другой — четыре. Как настроить сопоставление, если я просто хочу игнорировать дополнительный атрибут?

Все примеры исключений, которые я вижу, принимают аргумент как для первого, так и для второго класса.


person Arlo Guthrie    schedule 26.09.2016    source источник


Ответы (1)


Вам не нужно ничего делать; Dozer должен справиться с этим из коробки.

Рассмотрим следующие два компонента:

Источник.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());
    }

Когда мы сопоставляем источник с назначением, поскольку у назначения нет свойства с именем field3, оно игнорируется. Когда мы сопоставляем другой способ (назначение с источником), field3 в источнике равно нулю.

person Ian A    schedule 04.10.2016