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

集合中的mapstruct服务映射

彭阳荣
2023-03-14
Parent -> Collection<Child> children
ParentDTO -> Collection<ChildDTO> childDTOs
Child getChild(Long id)
@Mapper(uses = ChildService.class)
public interface ParentMapper {

    @Mapping(source="child.id", target="child")
    Parent dtoToDomain(ParentDTO parentDTO);
}
@Mapping(source="child.id", target="child")
Collection<Child> dtoToDomain(Collection<ChildDTO> children)

我可以想象这样一个解决方案:一个子映射器,在这个映射器中,我用如下所示的查找重写Dto to Domain方法:

@Mapper(uses = ChildMapper.class)
public interface ParentMapper {

    Parent dtoToDomain(ParentDTO parentDTO);
}

@Mapper(uses = ChildService.class)
public interface ChildMapper {

    @Mapping(source="id", target="")
    Child dtoToDomain(ChildDTO child);
}

但目标在MapStruct中是必需的。也许我可以以某种方式指定整个对象作为目标?

共有1个答案

子车超英
2023-03-14

我想你是在找对象工厂吧。

通过@objectfactory,您可以基于源对象为映射创建一个实例

例如:

public class ChildFactory {


    private final ChildService childService;

    public ChildFactory(ChildService childService) {
        this.childService = childService;
    }


    public Child createChild(ChildDto dto) {
        if (dto.getId() == null) {
            return new Child();
        } else {
            return childService.findById(dto.getId());
        }
    }
}
 类似资料:
  • 最后,我在我的映射类中使用了这个方法: 但这返回给我。我知道我的代码有问题,但我找不到适合我需要的有用的东西。你能帮我解决这个问题吗?

  • 我得到以下情况: 源类: null

  • 我使用以下映射器映射实体: 对于映射为集合的实体,我只需要忽略“数据”字段。但看起来仅适用于单个实体。我还注意到生成的方法只是在for循环中使用。对此有什么解决方案吗?

  • 我有两种将实体映射到域的方法。 当我试图定义实体列表到域的映射方法时,我发现了用于映射集合元素的模糊映射方法。 有没有一种方法可以定义用于映射对象集合的方法

  • 我正在使用MapStruct从一个JPA实体映射到一个POJO DTO,在一个带有依赖项注入的Spring应用程序中。 ...并且从不为集合中的项调用修饰方法。 有没有一种方法可以让Mapstruct在集合映射中使用decorator方法,而不是在我的decorator中手动编写集合方法(这种方法很有效,但很冗长,并且违背了Mapstruct最初的目的,即不必编写这种代码)?

  • 我使用Mapstruct来处理将一个POJO映射到另一个POJO的样板代码。 以下是DTO: 这是映射的POJO: 我正在寻找一种优雅的方法来处理和之间的映射。目前,我正在使用注释的属性。由于引用了我使用的是“周期映射”示例中的。 该界面还包含一个方法映射到,名称为。 有没有更优雅的方法来实现将不可编辑的转换为?我的方法可行,但也有缺点。例如,重构不能识别字符串中的代码片段。