MapStruct:对象的映射列表,当对象由两个对象映射时

2023-12-23

假设我有这样的映射:

@Mapping(source = "parentId", target = "parent.id")
Child map(ChildDto dto, Parent parent);

现在我需要将 ChildDto 列表映射到 Child 列表,但它们都有相同的父级。我期望做这样的事情:

List<Child> map(List<ChildDto> dtoList, Parent parent);

但它不起作用。 有机会去做吗?


我找到了如何用装饰器实现它,谢谢@Gunnar 这是一个实现:

Beans

public class Child {
    int id;
    String name;
}
public class Parent {
    int id;
    String name;
}
public class ChildDto {
    int id;
    String name;
    int parentId;
    String parentName;
}
// getters/settes ommited

Mapper

@Mapper
@DecoratedWith(ChildMapperDecorator.class)
public abstract class ChildMapper {
    public static final ChildMapper INSTANCE = Mappers.getMapper(ChildMapper.class);

    @Mappings({
            @Mapping(target = "parentId", ignore = true),
            @Mapping(target = "parentName", ignore = true)
    })
    @Named("toDto")
    abstract ChildDto map(Child child);

    @Mappings({
            @Mapping(target = "id", ignore = true),
            @Mapping(target = "name", ignore = true),
            @Mapping(target = "parentId", source = "id"),
            @Mapping(target = "parentName", source = "name")
    })
    abstract ChildDto map(@MappingTarget ChildDto dto, Parent parent);

    @IterableMapping(qualifiedByName = "toDto") // won't work without it
    abstract List<ChildDto> map(List<Child> children);

    List<ChildDto> map(List<Child> children, Parent parent) {
        throw new UnsupportedOperationException("Not implemented");
    }
}

装饰者

public abstract class ChildMapperDecorator extends ChildMapper {
    private final ChildMapper delegate;

    protected ChildMapperDecorator(ChildMapper delegate) {
        this.delegate = delegate;
    }

    @Override
    public List<ChildDto> map(List<Child> children, Parent parent) {
        List<ChildDto> dtoList = delegate.map(children);
        for (ChildDto childDto : dtoList) {
            delegate.map(childDto, parent);
        }
        return dtoList;
    }
}

I use abstract class, not interface对于映射器来说,因为如果interface您无法排除生成方法map(List<Child> children, Parent parent),并且生成的代码在编译时无效。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MapStruct:对象的映射列表,当对象由两个对象映射时 的相关文章

  • 具有默认值的 Java JAX-RS 自定义参数

    假设我有这个 这只是一个示例 GET Path value address Produces application json public Response getAddress QueryParam user User user 用户是
  • 我在socket上设置了超时,发现这个值不能大于21

    我在socket上设置了超时 该值小于21秒才有效 21秒后发现超时还是21秒 public static void main String args SimpleDateFormat sdf new SimpleDateFormat yy
  • Java - 如何将特殊字符放入字符串中

    Java 似乎有很好的字符串处理能力 尽管如此 我还是遇到了最简单的问题 我需要动态字符串 它们在运行时更改 因此字符串类型不是一个好的选择 因为它们是不可变的 所以我使用字符数组 设置起来有点痛苦 但至少它们是可以修改的 我想创建一个字符
  • JavaFX 图像未在舞台中显示

    我尝试了很多次 尝试了很多方法 但都无法让自己的形象在舞台上如我所愿 我认为这可能与java寻找资源的路径有关 但我不确定 因为我刚刚开始使用视觉库 在本例中为JavaFX 这是我的目录结构 MyProject assets img myI
  • Jackson - 反序列化嵌套 JSON

    我有一个 JSON 字符串 其格式如下 response execution status ready report cache hit true created on 2013 07 29 08 42 42 fact cache erro
  • 解决 Java Checkstyle 错误:名称 'logger' 必须匹配模式 '^[A-Z][A-Z0-9]*(_[A-Z0-9]+)*$'

    使用 Eclipse Checkstyle 插件我看到以下错误 名称 logger 必须匹配模式 A Z A Z0 9 A Z0 9 我通过更改解决了此错误 private static final Logger logger Logger
  • 在哪里可以获得有关 Java FitNesse 和 Slim 的一些教程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 无法使用 json 架构验证器根据预定义的 yaml 文件验证查询参数

    我需要根据预定义的 yaml 文件架构验证查询参数的架构 因此我使用 json 架构验证器 验证如何失败 我正在执行以下步骤 填充参数和相应的架构 final List
  • 使用 ChannelExec 的命令未执行 - Jsch

    我正在使用 Jsch 在服务器中创建一个文件并执行一些命令 对于文件创建 它工作正常 但是对于命令执行 则不然 它保持状态 1 仍在处理它 并永远保持该状态 这种情况发生在 shell 执行或我尝试成为 root 时 请按照以下方法操作 p
  • RMI 中的引用传递问题? [复制]

    这个问题在这里已经有答案了 有人可以告诉我我错在哪里 为什么这个 RMI 聊天应用程序不起作用 目标是通过远程对象或序列化对象实现客户端 服务器和逻辑之间的解耦 import javax swing import java awt even
  • 正则表达式获取字符串中的第一个数字和其他字符

    我是正则表达式的新手 想知道如何才能只获取字符串中的第一个数字 例如100 2011 10 20 14 28 55 在这种情况下 我希望它返回100 但该数字也可以更短或更长 我在想类似的事情 0 9 但它单独获取每个数字 100 2001
  • 容器中的 JVM 计算处理器错误?

    最近我又做了一些研究 偶然发现了这一点 在向 OpenJDK 团队抱怨之前 我想看看是否有其他人观察到这一点 或者不同意我的结论 因此 众所周知 JVM 长期以来忽略了应用于 cgroup 的内存限制 众所周知 现在从 Java 8 更新某
  • 异步迭代器

    我有以下代码 while slowIterator hasNext performLengthTask slowIterator next 由于迭代器和任务都很慢 因此将它们放入单独的线程中是有意义的 这是对迭代器包装器的快速而肮脏的尝试
  • 如何找到被点击的JLabel并从中显示ImageIcon?

    这是我的代码 我想知道哪个l单击 然后在新框架中显示该 ImageIcon e getSource 不起作用 final JFrame shirts new JFrame T shirts JPanel panel new JPanel n
  • JavaFX - 为什么多次将节点添加到窗格或不同的窗格会导致错误?

    我现在正在学习基本的 JavaFX 我不明白我正在阅读的书中的这一说法 不 诸如文本字段之类的节点只能添加到一个窗格中一次 将节点添加到多次窗格或不同的窗格将导致运行时错误 我可以从书中提供的UML图看出它是一个组合 但我不明白为什么 库类
  • 了解 Spark 中的 DAG

    问题是我有以下 DAG 我认为当需要洗牌时 火花将工作划分为不同的阶段 考虑阶段 0 和阶段 1 有些操作不需要洗牌 那么为什么 Spark 将它们分成不同的阶段呢 我认为跨分区的实际数据移动应该发生在第 2 阶段 因为这里我们需要cogr
  • 使用 JAD 反编译 java - 限制

    我正在尝试使用 Java 中的 JAD 反编译几个 jar 文件 我也尝试过 JD GUI 但运气更差 但出现了很多错误 一种类型 易于修复 似乎是内部类 但我也发现了这段代码 static int SWITCH TABLE atp com
  • 摩尔斯电码 至 英语

    我现在的问题是让 摩尔斯电码转英语 正常工作 将英语转换为莫尔斯电码的第一部分工作正常 我知道以前已经有人问过这个问题 但我不知道我做错了什么 我知道我需要在某个地方进行拆分 但我只是不确定将其放在代码中的何处 现在 莫尔斯电码到英语的部分
  • Java:使用 Graph API 在线更新 Sharepoint 上的 docx 文件

    我在使用 Java 在线更新 Sharepoint 上的 docx 文件时遇到问题 首先 我检查了构建 PUT 请求的 URL 此处 并使用此请求 PUT drives drive id items item id content 我首先使
  • 如何捕获 try-with-resource 语句中 close 方法抛出的异常

    我正在读关于try with resourceJava 中的语句可用于指定任意数量的资源 try Resource1 res1 initialize code Resource1 res2 initialize code statement

随机推荐

  • 在 HTML 元素上分配多种样式

    我刚刚开始使用 HTML 但在为文本分配多种样式时遇到了麻烦 我想创建一个具有两个属性的标题 Centered 字体 Tahoma 我已经尝试过这个 h2 style text align center TITLE h2 但它不起作用 我究
  • 将离屏 WebView 绘制为位图

    我试图在 android 中捕获从屏幕上绘制的 webview 图像给用户 但我总是得到黑色图像 这是正确的尺寸 但一切都不是 这是我正在使用的代码 String theURL file android asset www pages pa
  • Matplotlib:子图的高度相同

    在下面的示例中 如何将两个子图设置为相同的高度 minimal example import matplotlib pyplot as plt import numpy as np f ax1 ax2 plt subplots 1 2 im
  • 即使文件存在,如何修复 QFile 打开错误(未知错误)?

    我正在尝试打开并阅读map dat文件使用QFile接口 但它不会打开该文件 即使它确实存在于目录中 我努力了fopen ifstream在 C 中 但他们一直告诉我该文件不存在 即使我已将其添加到资源文件夹中 qrc 然后我转向QFile
  • jquery图像幻灯片随机显示图像

    我正在使用链接中的幻灯片放映 http www alohatechsupport net webdesignmaui maui web site design easy jquery auto image rotator http www
  • 如何确定 seq2seq 张量流 RNN 训练模型的最大批量大小

    目前 我使用默认的 64 作为 seq2seq 张量流模型的批量大小 最大批量大小 层大小等是多少 我可以使用具有 12 GB RAM 的单个 Titan X GPU 和 Haswell E xeon 128GB RAM 输入数据被转换为嵌
  • 有什么方法可以将 Xcode 3 与 iOS SDK 4.3 一起使用吗?

    我正在使用 Xcode 4 和 iOS 4 3 Xcode 4 有很多 bug 更不用说很多东西都改变了 最让我烦恼的是热键 我什至找不到一种方法来以合适的组合自定义它们 我很想使用 Xcode 3 因为它很稳定并且可以满足我的需要 是否可
  • 在 Common Lisp 中,如何格式化浮点并指定分组、群聊和小数分隔符

    假设我有浮点数1234 9 我想将其格式化为1 234 90 是否有格式指令组合 D 可以处理分组和群聊 仅处理整数 F根本不处理分组 据我所知 没有人可以改变小数点 to 我看到的唯一解决方案是使用 D对于整数部分数字分组并将其与 和小数
  • 如何覆盖 celery 任务的后端

    我们使用 Redis 作为结果后端 然而 对于一项任务 我们希望覆盖它以使用 RabbitMQ 的文档任务后端 http celery readthedocs org en latest userguide tasks html Task
  • 在 Google 表格之间自动复制数据

    我正在寻找一些帮助来自动在谷歌表格之间复制数据 我有一张名为 当前数据 的表格 该工作表的 A F 列中包含数据 带标题 A 列包含用户名 B F 列将包含使用以下公式从 Instagram com 提取数据的公式 值 REGEXEXTRA
  • 如何在 Visual Studio 选项中禁用设计模式

    如何在没有 Visual Studio 的情况下仅使用 XAML Code Viewload设计模式 我每次都需要禁用设计模式 我在我的选项中找不到这个 source biggle de http www biggle de allView
  • UWP 应用程序是否需要 Windows 应用商店?

    如果是 我如何使用它来开发内部的东西 我不想在商店里看到它 它永远不应该在企业外部看到 编辑 侧载是唯一的方法吗 侧面加载并不是在 UWP 中运行应用程序的唯一方法 您还可以创建自己的安装程序 在 Visual Studio 中转到 项目
  • 将 div 浮动在右上角而不重叠同级标题

    有一个div and a h1在一个部分中 如何将 div 浮动在右上角而不与标题文本重叠 HTML 代码如下 section h1 some long long long long header a whole line 1 2 3 4
  • 数据表和服务器端处理 - 按需加载

    我已经使用 DataTables 构建了简单的表 并且成功连接了服务器端脚本以用数据填充我的表 在我的表格上方 有 2 个复选框和 2 个日期选择来指定过滤条件 当我的页面加载时 我会填充表格 因为在启动时数据表正在从服务器提取第一页数据
  • phpMyAdmin 配置在 Centos 6.5 上不起作用

    最近使用 yum 安装了 phpMyAdmin yum install phpmyadmin phpmyadmin 已安装到 usr share phpMyAdmin 但那里没有配置文件 有一个 config inc php 文件位于 et
  • 有没有办法将嵌套记录选择到表中?

    我在 Bigquery 中有一张表 T 其中包含简单字段和一个嵌套字段 我想有效地 select from T where 并将结果存储在新表 U 中 我希望 U 具有与 T 相同的架构 包括嵌套字段 有没有办法在 Bigquery 中执行
  • 定位 window.location.pathname

    我有一个类似于此的网址 www mysite com products 我用它来测试路径名 if products test window location gaq push trackPageview products landing 但
  • 更改 Google Cloud SQL 实例的 TCP 端口:3306

    如何更改 Google Cloud SQL 实例上的 TCP 端口 Google MySQL 服务器正在侦听端口 3306 这在我的环境中不起作用 端口号需要不同 我不知道如何在开发者控制台 云存储中更改此设置 我确实看到了文档网络和防火墙
  • C++ 成员变量的类型名

    是否可以获取成员变量的类型名 例如 struct C int value typedef typeof C value type something like that Thanks C 03 中没有 C 0x介绍decltype type
  • MapStruct:对象的映射列表,当对象由两个对象映射时

    假设我有这样的映射 Mapping source parentId target parent id Child map ChildDto dto Parent parent 现在我需要将 ChildDto 列表映射到 Child 列表 但