【问题标题】:MapStruct - How to ignore the unnecessary methods/non-getter-setter methods in the POJOMapStruct - 如何忽略 POJO 中不必要的方法/非 getter-setter 方法
【发布时间】:2019-04-12 00:18:08
【问题描述】:

下面是 POJO:

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);
    }

}

它有一种加法器方法——

增量列表

以及复制到 getter 方法 -

获取列表

Mapstruct 生成的代码有以下不必要的东西,它添加了列表,源类型又一次:

if ( targetTypeTransferObjectListTO.getList() != null ) {
    List sourceTypeList = sourceTypeTransferObjectListTO.getList();
    if ( sourceTypeList != null ) {
        targetTypeTransferObjectListTO.getList().addAll( sourceTypeList );
    }
}

我们无法删除这些方法 - 以上 POJO 中的 incrementList() and getList(),因为它在很多地方都使用过。现在,当 mapstruct 生成映射的实现时,我们怎么能忽略这些方法呢?

【问题讨论】:

    标签: java list mapping pojo mapstruct


    【解决方案1】:

    您可以通过多种方式实现您的目标。问题仅在于 getList() 方法,incrementList() 已被 MapStruct 忽略。

    忽略映射

    如果您没有很多具有此模式的 POJO,并且您几乎没有使用此模式的映射器,则可以添加

    @Mapping(target = "list", ignore = true)
    

    写你自己的AccessorNamingStrategy

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

    public class CustomAccessorNamingStrategy extends DefaultAccessorNamingStrategy {
    
        @Override
        public boolean isGetterMethod(ExecutableElement method) {
            if (method.getSimpleName().toString().equals("getList")) {
                return false;
            } else {
                return super.isGetterMethod(method);
            }
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 2017-09-09
    • 1970-01-01
    相关资源
    最近更新 更多