如果 MapStruct 中的源为空,则将父目​​标设置为空

Set parent target to null if source is null in MapStruct

我有以下映射

@Mappings({
        @Mapping(source = "id", target = "id"),
        @Mapping(source = "childId", target = "child.id")
})
Entity objectDtoToEntity(ObjectDTO objectDTO);

我如何配置我的映射器或映射,以便当我将 childId 设置为 null 时,目标 Entity.child 将设置为 null 而不是 Entity.child.id?

找到了一个对我来说不是很优雅但可行的解决方案。

首先将接口更改为抽象 class 然后添加 @AfterMapping

@Mappings({
        @Mapping(source = "id", target = "id"),
        @Mapping(source = "childId", target = "child.id")
})
public abstract Entity objectDtoToEntity(ObjectDTO objectDTO);


@AfterMapping
public Entity doAfterMapping(@MappingTarget Entity entity) {
    if (entity != null && entity.getChild().getId() == null) {
        entity.setChild(null);
    }
    return entity;
}