java - 如何在 MapStruct 中将相同的 TO 映射到新的相同 TO?
问题描述
我的TO结构如下
OneComplexCto
-List<ComplexEto>
--List<SimpleEto>
我想让它自己映射(用于触发 ValueChangeListener)
所以我想映射,
OneComplexCto mapOneComplexCto(OneComplexCto source, @TargetMapping OneComplexCto target);
它只是映射,
oneComplexCto.setComplexEtos(target.getComplexEtos);
我希望它映射所有嵌套的 ComplexEto 和这些 ComplexEto 内的所有 SimpleEto。(显然我想为每个单独的字段调用设置器)。
解决方案
您已经注意到 MapStruct 只会在类型相同的情况下调用 setter。为了实现深度克隆,您需要定义所有类型之间的映射。在你的情况下,这看起来像:
@Mapper
public interface ComplexMapper {
OneComplexCto mapOneComplexCto(OneComplexCto source, @MappingTarget OneComplexCto target);
List<ComplexEto> map(List<ComplexEto> complexEtos);
ComplexEto map(ComplexEto complexEto);
List<SimpleEto> map(List<SimpleEto> simpleEtos);
SimpleEto map(SimpleEto simpleEto);
}
您应该关注并支持 mapstruct/mapstruct-695,它正在寻找允许 MapStruct 禁用相同类型的直接集并执行深度克隆的东西。
推荐阅读
- android - LoaderManager 抛出不兼容类型错误
- angular - 当我使用命令 ng new myprojectname 以角度创建新项目时出现此错误
- .htaccess - 我想替换 url 使用 htaccess
- postgresql - 在 PGAdmin4 中的数据库之间切换
- reactjs - 在 React 中加载没有侧边栏、导航栏和仪表板的登录页面
- sql-server - 在 Redhat 7.5 中连接到数据源时遇到问题
- java - 无法设置 java 小部件的位置
- php - 从 WordPress 下载 mySQL 表作为制表符分隔文件
- swift - Swift 5 的 Xcode 错误“dyld:未加载库:@rpath/libswiftCore.dylib”
- python - Python:如何从分布中选择一个值?