如何忽略集合创建方法

How to ignore method for collection creation

Mapstruct 使用我自己的 parameters-free 方法作为 List 的工厂(而不是构造函数)

我试图绘制一些 objects 树,应该逐层构建。所以我有一种用于硬编码根节点的方法和另一种用于将实体映射到节点的方法。所以我有一个生成根名称列表的方法,以及一个映射的抽象方法。

@Mapper
public abstract class TestMapper {

public List<Name> rootNames() {
    List<Name> names = new ArrayList<>();
    names.add(Name.build("Homer"));
    names.add(Name.build("Marge"));
    return names;
}

@Mapping(target = "name", source = "name")
public abstract Name childrenName(FullName simpson);

public abstract List<Name> childredNames(List<FullName> children);

public static class Name {
    private String name;

    public static Name build(String value) {
        Name name = new Name();
        name.setName(value);
        return name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public static class FullName {
    private String name;
    private String lastName;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}

}

所以在生成的代码中 "childrenNames" 看起来像 @覆盖 public 列表 children 名称(列表 children){ 如果(children == null){ return空; }

    List<Name> list = rootNames();
    for ( FullName fullName : children ) {
        list.add( simpsonName( fullName ) );
    }

    return list;
}

如何将我的 rootNames 方法标记为忽略映射?

此致。阿列克谢

如票证 https://github.com/mapstruct/mapstruct/issues/1725 中所述,您应该将 @Named 注释添加到 rootNames() 方法中。 如果没有注解,它将被 MapStruct 自动拾取为对象工厂(参见 http://mapstruct.org/documentation/dev/reference/html/#object-factories)。

一旦一个方法被注释 @Named 它只会在明确引用时被拾取。

@org.mapstruct.Named("rootNames")
public List<Name> rootNames() {
    List<Name> names = new ArrayList<>();
    names.add(Name.build("Homer"));
    names.add(Name.build("Marge"));
    return names;
}