Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MapStruct-如何忽略POJO中不必要的方法/非getter setter方法_Java_List_Mapping_Pojo_Mapstruct - Fatal编程技术网

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

Java MapStruct-如何忽略POJO中不必要的方法/非getter setter方法,java,list,mapping,pojo,mapstruct,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= t

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

}

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

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

忽略映射 如果没有很多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);
        }
    }
}

你可以通过多种方式实现你所追求的目标。问题只在于
getList()
方法,MapStruct已经忽略了
incrementList()

忽略映射 如果没有很多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);
        }
    }
}

这是一个非常好的入口点,但是它缺少关于如何使用自定义访问策略的信息。我将添加以下文档:这是一个非常好的入口点,但它缺少有关如何使用自定义AccessorNamegStrategy的信息。我要补充以下文件: