如何在mapStruct中排除id为空的字段



我是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;
}

相关内容

最新更新