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

时间:2018-11-08 13:20:16

标签: java list mapping pojo mapstruct

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

}

它有一种加法器-

  

incrementList

以及重复的获取方法-

  

getList

Mapstruct生成的代码具有以下不必要的内容,从而增加了列表以及源类型的时间:

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

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

1 个答案:

答案 0 :(得分:1)

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

忽略映射

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

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

写自己的AccessorNamingStrategy

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

public class CustomAccessorNamingStrategy extends DefaultAccessorNamingStrategy {

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