【发布时间】:2019-12-06 05:02:02
【问题描述】:
我正在尝试使用 Mapstruct 将源对象映射到目标列表。什么应该是一个干净的 mapstruct 方式来做到这一点?
以下是我的 DTO。
源 DTO
@Data
class Source
{
String a;
String b;
String C;
}
目标 DTO
@Data
class Target
{
String name;
List<Child> customList;
}
@Data
class Child
{
String attr1;
boolean attr2;
}
我遇到了 Mapper 类的问题。尝试实现以下目标。
public interface CustomMapper
{
@Mapper(target="customList" expression="java(new Child(a,false))"
@Mapper(target="customList" expression="java(new Child(b,true))"
@Mapper(target="customList" expression="java(new Child(c,false))"
Target sourceToTarget(Source source);
}
我不想使用下面的qualifiedBy函数来实现这一点,因为所有转换都需要为每个元素编码。
List<Child> toList(Source source)
{
List<Child> customList = new ArrayList<Child>();
customList.add(new Child(source.getA(),false));
customList.add(new Child(source.getB(),true));
customList.add(new Child(source.getC(),false));
return customList;
}
【问题讨论】:
-
做,IIUC,列表总是 3 个元素(子)?
-
@Sjaak 不,您的列表可以包含任意数量的元素。在上面的例子中依赖于源 DTO
-
我的意思是:元素的数量是否取决于类源中的属性数量?所以现在你有了对应于 a、b、c 的三个元素。但是假设你也有 d.. 你的列表会包含 4 个元素吗?这就是我从你的例子中得到的
-
正确,这取决于类源中的属性数量。
-
卡在同一个问题上!您通过注释方式解决了您的问题吗?任何痕迹(你是来自 Y****ks 的同一个人吗)