下面是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生成映射实现时,我们如何忽略这些方法?
答案 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);
}
}
}