Tus*_*rao 2 java mapping list 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);
}
}
Run Code Online (Sandbox Code Playgroud)
它有一种加法器方法 -
增量列表
以及复制到 getter 方法 -
获取列表
Mapstruct 生成的代码具有以下不必要的内容,其中添加了列表,再次添加了源类型:
if ( targetTypeTransferObjectListTO.getList() != null ) {
List sourceTypeList = sourceTypeTransferObjectListTO.getList();
if ( sourceTypeList != null ) {
targetTypeTransferObjectListTO.getList().addAll( sourceTypeList );
}
}
Run Code Online (Sandbox Code Playgroud)
incrementList() and getList()我们无法删除上面 POJO 中的这些方法,因为它在很多地方都使用了。现在,当mapstruct生成映射的实现时,我们如何才能忽略这些方法呢?
您可以通过多种方式实现您想要的目标。问题仅在于getList()方法,incrementList()MapStruct 已忽略该方法。
如果您没有很多具有此模式的 POJO,并且使用此模式的映射器很少,您只需添加
@Mapping(target = "list", ignore = true)
Run Code Online (Sandbox Code Playgroud)
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2986 次 |
| 最近记录: |