Сначала позвольте мне извиниться, если этот вопрос уже был задан. Я не смог найти ссылку в StackOverflow.
Я пытаюсь использовать квалификацию в моем отображении между bean-компонентами через MapStruct, чтобы преобразовывать списки с помощью квалифицированного отображения. Увы, безуспешно.
Предположим, у нас есть следующие классы (максимально упрощенные, и я опущу очевидные методы получения / установки):
public class A {
private String propertyA;
}
public class B {
private String propertyB;
private A instanceA;
}
public class C {
private List<B> instancesB;
}
public class A1 {
private String propertyA;
}
public class B1 {
private String propertyB;
private A1 instanceA1;
}
public class C1 {
private List<B1> instancesB1;
}
Предположим, у нас есть следующий классификатор:
@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.METHOD })
public @interface Full{}
Предположим также, что имеются следующие отображения:
@Mapper
public interface MapperA {
A1 toA1(A a);
A toA(A1 a1);
}
@Mapper
public interface MapperB {
B1 toB1(B b);
@Mapping(source="propertyA", target="propertyA1")
@Full
B1 toB1Full(B b);
@IterableMapping(qualifiedBy=Full.class)
@Full
List<B1> toB1s(List<B> bs);
toB(B1 b);
@Mapping(source="propertyA1", target="propertyA")
@Full
toBFull(B1 b);
@IterableMapping(qualifiedBy=Full.class)
@Full
List<B> toBs(List<B1> bs);
}
@Mapper
public interface MapperC {
<HERE IS THE PROBLEM>
}
Как я могу написать Mapper C, чтобы использовать полное отображение для повторных экземпляров B?
Независимо от того, как я пытаюсь написать аннотации для сопоставления, например
@Mapping(source = "instancesB1", target="instancesB", qualifiedBy=Full.class)
Я всегда нахожусь с неполной сопоставленной сущностью: у экземпляра B1 есть правильно сопоставленное поле propertyB
, но нет instanceA1
.
Конечно, я могу просто написать MapperC
как абстрактный класс, реализовать метод, вызвать вручную маппер и просто быть довольным этим, но я задаюсь вопросом, можно ли как-то просто аннотировать метод в MapperC
и пусть Mapstruct автоматически использует для меня правильный метод отображения (поскольку это упрощенный случай, но я могу преобразовать десятки таких списков).
Спасибо за внимание.