如何忽略集合创建方法

时间:2019-02-18 10:36:35

标签: mapstruct

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(列出孩子){         if(children == null){             返回null;         }

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

    return list;
}

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

最好的问候。阿列克谢

1 个答案:

答案 0 :(得分: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;
}
相关问题