mapStruct中id为空时如何排除字段?
How to exclude a field when its id is empty in mapStruct?
我是 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
变空时,我得到 MyClass
用参数 info
和一个空的零件列表实例化。
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;
}
或者您可以为其创建新的 class:
@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;
}
我是 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
变空时,我得到 MyClass
用参数 info
和一个空的零件列表实例化。
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;
}
或者您可以为其创建新的 class:
@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;
}