当mapStruct中的字段为空时如何排除该字段?

问题描述 投票:0回答:1

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

我不知道如何实现。

我希望我能解释自己。如果有人可以给我带来一些启示,将不胜感激

java mapstruct
1个回答
0
投票

您可以使用自己的逻辑:

@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;
   }
© www.soinside.com 2019 - 2024. All rights reserved.