首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapStruct -如何忽略POJO中不必要的方法/非getter-setter方法

MapStruct -如何忽略POJO中不必要的方法/非getter-setter方法
EN

Stack Overflow用户
提问于 2018-11-08 13:20:16
回答 1查看 2K关注 0票数 2

下面是POJO:

代码语言:javascript
复制
public class TransferObjectListTO {

    private List<A> transferList;

    public List<A> getTransferList() {
        return transferList;
    }

    public void setList(List<A> transferList) {
        this.transferList= transferList;
    }

    public List<A> getList() {
        return getTransferList();
    }

    public void incrementList(List<A> transferList) {
        getTransferList().addAll(transferList);
    }

}

它有一种加法-

incrementList

再加上复制的方法-

getList

Mapstruct生成的代码下面有一些不必要的内容,它添加了list,再添加一次源类型:

代码语言:javascript
复制
if ( targetTypeTransferObjectListTO.getList() != null ) {
    List sourceTypeList = sourceTypeTransferObjectListTO.getList();
    if ( sourceTypeList != null ) {
        targetTypeTransferObjectListTO.getList().addAll( sourceTypeList );
    }
}

我们不能删除这些方法-- incrementList() and getList()在上面的POJO中,因为它在许多地方都使用过。现在,当mapstruct生成用于映射的实现时,我们如何忽略这些方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-08 14:15:50

有多种方法,你可以实现你想要的。问题只是getList()方法,incrementList()已经被MapStruct忽略了。

忽略映射

如果您没有很多具有此模式的POJO,并且很少有映射器使用此模式,则只需添加

代码语言:javascript
复制
@Mapping(target = "list", ignore = true)

写你自己的AccessorNamingStrategy

如果您有很多POJO和许多映射器,那么我建议您编写自己的自定义AccessorNamingStrategy,将getList()方法标记为OTHER方法。

代码语言:javascript
复制
public class CustomAccessorNamingStrategy extends DefaultAccessorNamingStrategy {

    @Override
    public boolean isGetterMethod(ExecutableElement method) {
        if (method.getSimpleName().toString().equals("getList")) {
            return false;
        } else {
            return super.isGetterMethod(method);
        }
    }
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53208604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档