Отображение из разных объектов в одно поле - PullRequest
0 голосов
/ 01 октября 2019

В начале я хотел бы предупредить, что я удалил геттеры и сеттеры, чтобы сделать код кратким.

Я думаю, код будет описывать более точно, что многие слова

//Mapper is obviously as separate class
@Mapper
public interface TestMapper {
    @Mapping(source = "x.field1", target="inner.field1")
    @Mapping(source = "y.field2", target="inner.field2")
    Target map(Source source);
}

class Source {
    private X x;
    private Y y;
}

class X {
    private String field1;
}

class Y {
    private String field2;
}

class Target {
    private Inner inner;
}

class Inner {
    private String field1;
    private String field2;
}

public class Main {
    public static void main(String[] args) {
        Source source = new Source();
        final X x = new X();
        x.setField1("field1");
        Y y = new Y();
        y.setField2("field2");
        source.setX(x);
        source.setY(y);

        final TestMapper mapper = Mappers.getMapper(TestMapper.class);
        Target target = mapper.map(source);
        System.out.println(source.getX().getField1().equals(target.getInner().getField1()));
        System.out.println(source.getY().getField2().equals(target.getInner().getField2()));
    }
}

Такиереализация кода генерируется следующим образом:

public class TestMapperImpl implements TestMapper {

    @Override
    public Target map(Source source) {
        if ( source == null ) {
            return null;
        }

        Target target = new Target();

        target.setInner( xToInner( source.getX() ) );
        target.setInner( yToInner( source.getY() ) );

        return target;
    }
    (...)

Это, очевидно, вызывает переопределение значения Inner. Что не то, что я ожидал. Есть ли способ заставить его работать? Или это какая-то ошибка в mapstruct?

1 Ответ

3 голосов
/ 01 октября 2019

Это известная ошибка в MapStruct, исправленная в окончательном выпуске 1.3.1.

Соответствующая проблема: mapstruct / mapstruct # 1828 .

ВЕсли после обновления до версии 1.3.1 у вас все еще остается та же проблема, пожалуйста, поднимите новую проблему в трекере ошибок MapStruct

...