下面是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生成的代码下面有一些不必要的内容,它添加了list,再添加一次源类型:
if ( targetTypeTransferObjectListTO.getList() != null ) {
List sourceTypeList = sourceTypeTransferObjectListTO.getList();
if ( sourceTypeList != null ) {
targetTypeTransferObjectListTO.getList().addAll( sourceTypeList );
}
}我们不能删除这些方法-- incrementList() and getList()在上面的POJO中,因为它在许多地方都使用过。现在,当mapstruct生成用于映射的实现时,我们如何忽略这些方法?
发布于 2018-11-08 14:15:50
有多种方法,你可以实现你想要的。问题只是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);
}
}
}https://stackoverflow.com/questions/53208604
复制相似问题