我是mapStruct
的新手,不知道如何在字段为空时排除它。
类看起来像这样:
public class MyClass {
String reference;
Info info;
...
}
public class Info{
Long id;
List<String> parts = new ArrayList<>();
...
}
这就是映射器:
@Mapping(target = "info.id", source = "infoId")
public abstract MyClass toMyClass(RequestProto.line Line);
因此,当info.id
为空时,我得到用参数info
实例化的MyClass
,其中有一个空的零件列表。
MYCLASS(current)
{
reference: "aa",
info: {
parts: []
}
}
我想要的是,当info.id
为空时,info
参数为空。
MYCLASS(expected)
{
reference: "aa"
info: null
}
我不知道如何做到这一点。
我希望我能解释我自己。如果有人能给我带来一些光,将不胜感激
您可以使用自己的逻辑:
@Mapping(target = "info", source = "Line", qualifiedByName = "info")
public abstract MyClass toMyClass(RequestProto.line Line);
@Named("info")
public Info mapInfo(RequestProto.line Line) {
if(infoId.isEmpty()) {
return null;
}
Info info = new Info();
info.setId(infoId);
return info;
}
或者你可以为它创建新的类:
@Mapper(uses = {InfoMapper.class}, unmappedTargetPolicy = ReportingPolicy.IGNORE)
public MyClassMapper {
@Mapping(target = "info", source = "Line", qualifiedByName = "info")
public abstract MyClass toMyClass(RequestProto.line Line);
}
public class InfoMapper implements Function<Info, RequestProto.line> {
@Override
@Named("info")
public Info apply(RequestProto.line Line) {
//pseudo code, make it better based on your request object
if(infoId.isEmpty()) {
return null;
}
Info info = new Info();
info.setId(infoId);
return info;
}