代码之家  ›  专栏  ›  技术社区  ›  Tushar Ahirrao

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

  •  0
  • Tushar Ahirrao  · 技术社区  · 6 年前

    以下是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);
        }
    
    }
    

    它有一种加法器方法-

    递增列表

    获取列表

    Mapstruct生成的代码包含以下不必要的内容,其中添加了列表,再次使用源类型:

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

    我们不能删除这些方法- incrementList() and getList()

    1 回复  |  直到 6 年前
        1
  •  2
  •   Filip    6 年前

    你可以通过多种方式实现你想要的目标。问题只在于 getList() incrementList() 已被MapStruct忽略。

    如果你没有很多pojo有这种模式,而你有很少的映射器使用这种模式,你可以添加

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

    写你自己的 AccessorNamingStrategy

    辅助策略 获取列表() 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);
            }
        }
    }