当前位置: 首页 > 知识库问答 >
问题:

MapStruct:映射两个源,如果其中一个源为空,则返回null

子车文康
2023-03-14

我找不到答案,我相信MapStruc不可能这样做。无论如何我想问一下,也许我错过了什么。

我有一个映射方法,它采用两个源并映射到一个目标,比方说

@Mapping(...)
@Mapping(...)
...
Target mapToTarget(SourceA a, SourceB b);

生成的代码执行以下null检查以返回null:

if (a == null && b == null) return null;

我希望

if (a == null || b == null) return null;

附注:我们使用MapStruct 1.3.1

共有1个答案

郭盛
2023-03-14

这在MapStruct中是不可能的。但是,您可以通过提供默认方法来实现这一点。

例如。

@Mapper
public abstract class CustomerMapper {

    public Target mapToTarget(SourceA a, SourceB b) {
        if (a == null || b == null) {
            return null;
        }

        return mapToTargetWithMapStruct(a, b);
    }

    @Named("ignore") // @Named in order for MapStruct not to consider this as a candidate
    protected abstract mapToTargetWithMapStruct(SourceA a, SourceB b);

}
 类似资料:
  • 如果(tagrecord.gettagid()==null&&tagrecord.gettaglabel()==null),我实际上希望生成的方法返回一个null标记对象。有没有可能,我该如何实现这一点?

  • 我试图使用MapStruct在dto和实体对象之间映射convert,但是生成的映射器实现只返回空的映射对象。 BeermapperImpl 任何人都可以提供我的代码可能出错的地方?谢谢!

  • 假设我需要将两个对象映射成一个或一个对象映射成一个(重载)。我可以通过以下映射来实现: 是否有一种方法可以更改第二个映射器“先做第一个映射器”,然后应用的附加映射?

  • “想要解决方案B” 有什么办法可以做到这一点吗?

  • Mapstruct在Spring-Boot rest api中使用一对多和多对一关系映射我的实体时遇到了一个问题。 我有下面的课 因此,当我在评论中添加私有UserDTO用户时;进入PolicyDTO和公共列表PolicyList;进入UserDTO 结果策略列出了所有字段中的值都可以,当然,除了两个注释字段。如果我用双向关系将这两个字段取消注释到DTO中,结果不仅在关系字段中是null,而且在所

  • 默认情况下,MapStruct将NullValueMappingStrategy作为RETURN_NULL。我的要求是,当source为null时,我需要抛出一个NPE,类似于lombok的@nonnull的工作方式。