如何忽略集合创建的方法

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

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

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

@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”看起来像@Override public List childrenNames(List children){if(children == null){return null; }

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

    return list;
}

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

最好的祝福。阿列克谢

mapstruct
1个回答
1
投票

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