Передача объекта с помощью MapStruct через 2 Mappers с использованием сгенерированного класса - PullRequest
0 голосов
/ 15 марта 2020
  • У меня есть 3 класса: A, B, C.
  • Каждый из них имеет одно поле ObjectX.
  • Классы A и C также имеют поле ObjectY.
  • Класс B генерируется автоматически, я не могу его изменить.
  • У меня есть преобразователь от A до B и преобразователь от B до C, они не включают ObjectY ( это игнорируется).

Можно ли как-то изменить эти сопоставители для включения ObjectY (без добавления сопоставления между A и C)?

код картографа ниже:

@Mapper
public interface MyMapper {
@Mapping(target = "ObjectX")
  B AtoB(A a);

@Mapping(target = "ObjectX")
  C BtoC(B b);
}

1 Ответ

0 голосов
/ 16 марта 2020

Если я правильно понял вопрос, вы хотите перевести A в B, а затем B в C и также оставить поле ObjectY. Проблема в том, что B не имеет поля ObjectY, поэтому он не может сохранить его значение посредством этого перевода.

Единственное решение, которое приходит мне в голову, - это создать класс MyB, который расширяет класс B и содержит поле ObjectY, а затем измените свой маппер следующим образом:

public class MyB extends B {
    private ObjectY objectY;
    // getters and setters omitted for brevity
}
@Mapper
public interface MyMapper {
    MyB AtoB(A a);

    C BtoC(MyB b);
}

Но я не уверен, возможно ли это в вашем случае использования.

...