MapStruct - 如何忽略 POJO 中不必要的 methods/non-getter-setter 方法
MapStruct - How to ignore the unnecessary methods/non-getter-setter methods in the POJO
下面是 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
连同复制到 getter 方法 -
getList
Mapstruct 生成的代码有以下不必要的东西,它添加了列表,多了一次源类型:
if ( targetTypeTransferObjectListTO.getList() != null ) {
List sourceTypeList = sourceTypeTransferObjectListTO.getList();
if ( sourceTypeList != null ) {
targetTypeTransferObjectListTO.getList().addAll( sourceTypeList );
}
}
我们无法删除上述 POJO 中的这些方法 - incrementList() and getList()
因为它在很多地方都被使用。现在,当 mapstruct 生成映射实现时,我们如何忽略这些方法?
您可以通过多种方式实现您的目标。问题仅在于 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);
}
}
}
下面是 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
连同复制到 getter 方法 -
getList
Mapstruct 生成的代码有以下不必要的东西,它添加了列表,多了一次源类型:
if ( targetTypeTransferObjectListTO.getList() != null ) {
List sourceTypeList = sourceTypeTransferObjectListTO.getList();
if ( sourceTypeList != null ) {
targetTypeTransferObjectListTO.getList().addAll( sourceTypeList );
}
}
我们无法删除上述 POJO 中的这些方法 - incrementList() and getList()
因为它在很多地方都被使用。现在,当 mapstruct 生成映射实现时,我们如何忽略这些方法?
您可以通过多种方式实现您的目标。问题仅在于 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);
}
}
}