Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
使用 Mapstruct 处理 Java 递归结构的序列化_创想鸟

使用 Mapstruct 处理 Java 递归结构的序列化

使用 mapstruct 处理 java 递归结构的序列化

本文介绍了如何使用 Mapstruct 优雅地处理 Java 中包含递归结构的对象的序列化。通过定义多个 M%ignore_a_1%er 接口,并结合 @Mapping 注解,可以实现将具有嵌套 List 结构的实体类转换为对应的响应类,避免手动编写复杂的转换逻辑,提高开发效率和代码可维护性。本文提供了一个完整的示例,展示了如何配置和使用 Mapstruct 来处理树形结构的序列化。

在 Java Web 应用开发中,经常需要将内部数据模型转换为对外暴露的 API 响应模型。当数据模型包含递归结构,例如树形结构时,手动编写序列化逻辑会变得非常繁琐且容易出错。Mapstruct 是一个强大的 Java Bean 映射器,可以自动生成类型安全的映射代码,极大地简化了对象转换的过程。本文将介绍如何利用 Mapstruct 处理包含递归结构的对象的序列化。

示例:树形结构的序列化

假设我们有一个 Tree 类,它包含一个 Leaf 列表,而每个 Leaf 又可以包含一个 Leaf 列表,形成一个树形结构。

@Builder@Getter@AllArgsConstructor@FieldDefaults(level = PUBLIC)public class Tree {    String name;    List leafs;}
@Builder@Getter@AllArgsConstructor@FieldDefaults(level = PUBLIC)public class Leaf {    String name;    List children;}

我们需要将 Tree 转换为 TreeResponse,Leaf 转换为 LeafResponse。

立即学习“Java免费学习笔记(深入)”;

@Getter@Setter@FieldDefaults(level = PUBLIC)public class TreeResponse {    String name;    List leafs;}
@Getter@Setter@FieldDefaults(level = PUBLIC)public class LeafResponse {    String name;    List children;}

Mapstruct 的配置

为了实现上述转换,我们需要定义两个 Mapper 接口:TreeMapper 和 LeafMapperSecond。

@Mapperpublic interface TreeMapper {    @Mapping(target = "name", source = "entity.name")    TreeResponse map(Tree entity);}
@Mapperpublic interface LeafMapperSecond {    LeafResponse map(Leaf entity);    List map(List entity);}

TreeMapper 负责将 Tree 转换为 TreeResponse,并使用 @Mapping 注解指定 name 属性的映射关系。LeafMapperSecond 负责将 Leaf 转换为 LeafResponse,并提供了一个用于转换 List 的方法。

关键点在于定义两个 Mapper, LeafMapperSecond 需要包含转换单个 Leaf 和 List 的方法。

测试用例

以下是一个测试用例,用于验证 Mapstruct 的配置是否正确。

private TreeMapper treeMapper = Mappers.getMapper(TreeMapper.class);    @Test    public void test() {        List leafs = new ArrayList();        leafs.add(Leaf.builder().name("Leaf 1").build());        leafs.add(                Leaf.builder()                        .name("Leaf 2")                        .children(                                Arrays.asList(                                        Leaf.builder()                                                .name("Leaf Children 1")                                                .children(                                                        Arrays.asList(                                                                Leaf.builder()                                                                        .name("Leaf Children 1.1")                                                                        .build(),                                                                Leaf.builder()                                                                        .name("Leaf Children 1.2")                                                                        .build()))                                                .build(),                                        Leaf.builder().name("Leaf Children 2").build()))                        .build());        Tree tree = Tree.builder().name("tree name").leafs(leafs).build();        TreeResponse treeResponse = treeMapper.map(tree);        assertEquals(treeResponse.name, "tree name");        assertEquals(treeResponse.leafs.size(), 2);        LeafResponse leafWithChildren =                treeResponse.leafs.stream()                        .filter(l -> l.name.equals("Leaf 2"))                        .findFirst()                        .orElse(null);        assertNotNull(leafWithChildren);        assertEquals(leafWithChildren.getChildren().size(), 2);        LeafResponse leafWithSubChildren =                leafWithChildren.children.stream()                        .filter(l -> l.name.equals("Leaf Children 1"))                        .findFirst()                        .orElse(null);        assertNotNull(leafWithSubChildren);        assertEquals(leafWithChildren.getChildren().size(), 2);    }

注意事项

确保 Mapstruct 的依赖已正确添加到项目中。Mapper 接口需要使用 @Mapper 注解进行标记。可以使用 @Mapping 注解指定属性之间的映射关系,特别是当属性名称不一致时。对于递归结构,需要定义多个 Mapper 接口,并确保它们能够相互调用。Mapstruct 会自动生成类型安全的映射代码,因此可以避免手动编写复杂的转换逻辑。

总结

通过使用 Mapstruct,我们可以轻松地处理 Java 中包含递归结构的对象的序列化。通过定义多个 Mapper 接口,并结合 @Mapping 注解,可以实现将具有嵌套 List 结构的实体类转换为对应的响应类,避免手动编写复杂的转换逻辑,提高开发效率和代码可维护性。 在处理复杂的数据结构转换时,Mapstruct 能够极大地简化开发流程,提高代码质量。

以上就是使用 Mapstruct 处理 Java 递归结构的序列化的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/134008.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
win8上帝模式怎么开启_一键开启Win8隐藏功能GodMode
上一篇 2025年11月29日 09:45:21
悟空浏览器网页版云端入口 悟空浏览器在线云浏览器登录
下一篇 2025年11月29日 09:47:35

相关推荐

  • 微软的Gaming Copilot更像是AI版的查攻略

    微软的Gaming Copilot更像是AI版的查攻略微软的Gaming Copilot更像是AI版的查攻略微软的Gaming Copilot更像是AI版的查攻略微软的Gaming Copilot更像是AI版的查攻略

    微软的copilot ai从下周开始就要登陆windows pc上的xbox游戏栏(xbox game bar)。这项名为“游戏copilot”的新功能刚在上个月公布,截至周四,它已开始在pc上进行全面beta测试,并将于10月登陆xbox移动app。顾名思义,它是copilot的游戏专属版本,微软…

    2026年10月1日 • 用户投稿
    800
  • 拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格

    拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格拼多多店铺怎么查询商品?拼多多店铺怎么查询商品价格

    答案:可通过店铺内搜索、平台搜索筛选店铺、查看商品详情页获取价格。进入目标店铺,使用“店内搜”输入关键词查找;或在拼多多主搜索框输入店铺名,进入后浏览商品列表;点击商品进入详情页可查看当前售价、促销价及划线价等详细信息。 如果您想在拼多多店铺中查找特定商品或了解其价格信息,可以通过平台内的多种方式进…

    2026年10月1日 • 用户投稿
    100
  • 拼多多无法联系客服怎么办 客服入口与处理方案

    拼多多无法联系客服怎么办 客服入口与处理方案拼多多无法联系客服怎么办 客服入口与处理方案拼多多无法联系客服怎么办 客服入口与处理方案拼多多无法联系客服怎么办 客服入口与处理方案

    遇到拼多多客服难联系时,可先在APP内“我的-客服”输入“人工客服”或“12345”触发转接,避免高峰时段尝试;若无效,拨打021-53395288或邮件service@pinduoduo.com联系;仍无果可微信提交“12315”小程序投诉,填写企业名称“上海寻梦网络科技有限公司”并上传证据;也可…

    2026年10月1日 • 用户投稿
    100
  • 抖音电商双11零点秒杀怎么抢到手_抖音电商双11秒杀抢购秘籍

    抖音电商双11零点秒杀怎么抢到手_抖音电商双11秒杀抢购秘籍抖音电商双11零点秒杀怎么抢到手_抖音电商双11秒杀抢购秘籍抖音电商双11零点秒杀怎么抢到手_抖音电商双11秒杀抢购秘籍抖音电商双11零点秒杀怎么抢到手_抖音电商双11秒杀抢购秘籍

    答案:提升抖音双11零点秒杀成功率需优化网络与设备、提前预设商品信息、精准同步时间、关注直播间专属入口并可采用多账号协同策略。 如果您在抖音电商双11活动期间尝试参与零点秒杀,但总是未能成功下单,可能是由于操作节奏、网络环境或策略准备不足所致。以下是帮助您提升抢购成功率的多种方法: 一、优化设备与网…

    2026年10月1日 • 用户投稿
    300
  • 拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗

    拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗拼多多鞋子质量问题可以举报商家吗安全吗?拼多多买的鞋子有质量问题但是穿过可以退换吗

    答案:可退换货并举报商家。在拼多多购买的鞋子若存在质量问题,即使穿过也可申请售后,需提供开箱视频、瑕疵照片等证据,选择“商品质量问题”发起退货退款或换货,商家拒绝可请求平台介入;同时可在订单页举报商家,提交证据链;若平台处理不力,可通过12315小程序投诉,填写商家信息并引用消法第五十五条要求退一赔…

    2026年10月1日 • 用户投稿
    100
  • 美图秀秀图片编辑无法撤销怎么办 美图秀秀撤销功能使用方法

    美图秀秀提供多种撤销方式:电脑版可用Ctrl+Z快捷键、工具栏撤销按钮或历史记录面板回退;手机版可点击右上角撤销图标或使用双指右滑手势,且需及时保存草稿以防记录丢失。若无法撤销,可检查是否覆盖原图、从相册找回原始照片,或通过云备份恢复版本。养成备份与保存习惯能有效避免编辑失误导致的损失。 在美图秀秀…

    2026年10月1日
    100
  • 京东免运费怎么设置的?京东如何设置免运费

    京东免运费怎么设置的?京东如何设置免运费京东免运费怎么设置的?京东如何设置免运费京东免运费怎么设置的?京东如何设置免运费京东免运费怎么设置的?京东如何设置免运费

    答案:满足订单金额门槛、开通PLUS会员或使用运费券可免运费。具体包括京东自营满59元包邮,PLUS会员享无限免邮,第三方店铺满59元包邮,以及领取运费券或购买包邮商品等方式实现免运费。 如果您在京东购物时希望免除运费,可以通过满足特定条件或使用相关服务来实现。以下是设置免运费的详细步骤: 本文运行…

    2026年10月1日 • 用户投稿
    100
  • windows怎么修复引导_系统启动引导项修复命令教程

    windows怎么修复引导_系统启动引导项修复命令教程windows怎么修复引导_系统启动引导项修复命令教程windows怎么修复引导_系统启动引导项修复命令教程windows怎么修复引导_系统启动引导项修复命令教程

    无法进入Windows系统时,可依次尝试自动修复、命令行重建BCD、手动添加引导项或使用第三方工具修复。首先通过强制关机三次进入WinRE,使用启动修复;若无效,在命令提示符下运行bootrec命令扫描并修复引导分区;当BCD缺失时,用bcdedit命令手动创建引导条目;最后可通过微PE等工具盘进入…

    2026年10月1日 • 用户投稿
    200
  • 美图秀秀滤镜无法预览怎么办

    美图秀秀滤镜无法预览怎么办美图秀秀滤镜无法预览怎么办美图秀秀滤镜无法预览怎么办美图秀秀滤镜无法预览怎么办

    首先检查权限设置,进入手机设置→应用管理→美图秀秀→权限管理,确保相机、存储、麦克风权限已开启;安卓用户需在自启动管理中允许后台运行;接着清除应用缓存,进入设置→应用→美图秀秀→存储→清除缓存;然后重启应用测试;若无效,前往应用商店更新或重装最新版本;再尝试用普通JPG图片测试,并关闭省电模式以保障…

    2026年10月1日 • 用户投稿
    200
  • 如何通过硬件序列号验证产品的真伪和保修?

    如何通过硬件序列号验证产品的真伪和保修?如何通过硬件序列号验证产品的真伪和保修?如何通过硬件序列号验证产品的真伪和保修?如何通过硬件序列号验证产品的真伪和保修?

    答案:通过官方渠道验证序列号可判断产品真伪与保修状态。需找到产品序列号(位于机身、包装或软件中),登录官网或APP输入查询,核对型号、生产日期与保修信息,结果不符可能因输入错误、数据库延迟或序列号被篡改;遇篡改应检查外观、联系客服、寻求第三方鉴定并保留证据维权;为防假货,应选正规渠道购买、索要发票、…

    2026年9月30日 • 用户投稿
    700
  • LINUX如何配置环境变量_LINUX环境变量配置方法与实践

    LINUX如何配置环境变量_LINUX环境变量配置方法与实践LINUX如何配置环境变量_LINUX环境变量配置方法与实践LINUX如何配置环境变量_LINUX环境变量配置方法与实践LINUX如何配置环境变量_LINUX环境变量配置方法与实践

    正确配置环境变量是确保Linux系统中程序正常运行的关键。首先,通过编辑用户主目录下的~/.bashrc文件,使用export命令添加如JAVA_HOME等变量,并执行source ~/.bashrc使其生效,适用于当前用户;其次,修改/etc/environment文件可设置对所有用户生效的全局变…

    2026年9月30日 • 用户投稿
    700
  • 拼多多手机网页版登录 拼多多官网首页入口

    拼多多手机网页版登录 拼多多官网首页入口拼多多手机网页版登录 拼多多官网首页入口拼多多手机网页版登录 拼多多官网首页入口拼多多手机网页版登录 拼多多官网首页入口

    拼多多手机网页版登录入口位于官网首页右上角,用户可通过手机号验证码、账号密码或扫码方式登录,支持多设备数据同步与便捷购物功能。 拼多多手机网页版登录入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来拼多多官网首页入口及相关信息,有需要的用户可以一起随小编来了解看看吧! https://m…

    2026年9月30日 • 用户投稿
    100
  • iCloud官网怎么解绑设备_iCloud设备移除与管理方法

    iCloud官网怎么解绑设备_iCloud设备移除与管理方法iCloud官网怎么解绑设备_iCloud设备移除与管理方法iCloud官网怎么解绑设备_iCloud设备移除与管理方法iCloud官网怎么解绑设备_iCloud设备移除与管理方法

    首先通过iCloud官网或iPhone设置移除设备,操作前需备份数据并确认Apple ID密码及双重认证方式,确保设备能顺利解除激活锁并从账户中移除。 如果您需要将某台设备从您的iCloud账户中移除,例如准备出售或赠送设备,但未在设备本身上进行解绑操作,则可以通过iCloud官网远程解除绑定。以下…

    2026年9月30日 • 用户投稿
    100
  • edge怎么关闭启动时的欢迎页面_edge关闭首次运行欢迎体验页面的技巧

    1、通过Edge设置关闭欢迎页面:进入edge://settings/onStartup,选择“打开新标签页”并取消勾选推广选项;2、修改注册表屏蔽提示:在HKEY_LOCAL_MACHINESOFTWAREPoliciesMicrosoftEdge下创建名为HideFirstRunExperien…

    2026年9月30日
    100
  • 抖音双十一活动时间表怎么看?抖音双十一活动什么时候开始

    抖音双十一活动时间表怎么看?抖音双十一活动什么时候开始抖音双十一活动时间表怎么看?抖音双十一活动什么时候开始抖音双十一活动时间表怎么看?抖音双十一活动什么时候开始抖音双十一活动时间表怎么看?抖音双十一活动什么时候开始

    一年一度的双十一购物狂欢节又要来了,相信很多小伙伴都在期待着这一天。抖音作为国内领先的短视频社交平台,自然也会推出一系列精彩的活动。抖音双十一活动时间表怎么看?下面,就让我来为大家详细解析一下。 一、抖音双十一活动时间表 根据最新信息,2025年抖音双十一大促已全面升级,整体活动周期大幅延长,主要分…

    2026年9月30日 • 用户投稿
    100
  • Apache 2.4环境中正确配置.phps文件源码访问权限

    本文旨在解决Apache 2.4服务器上访问.phps文件时遇到的403 Forbidden错误。核心解决方案在于,对于现代Apache版本,应使用Require all granted指令替换旧的Order Deny,Allow语法,以确保正确授权对PHP源代码文件的访问,并详细指导配置步骤,避免…

    2026年9月30日
    100
  • 神马搜索App收藏夹管理指南_神马搜索App搜索结果保存技巧

    神马搜索App收藏夹管理指南_神马搜索App搜索结果保存技巧神马搜索App收藏夹管理指南_神马搜索App搜索结果保存技巧神马搜索App收藏夹管理指南_神马搜索App搜索结果保存技巧神马搜索App收藏夹管理指南_神马搜索App搜索结果保存技巧

    可通过收藏夹功能保存并管理神马搜索App中的重要信息。1、打开目标页面后点击“收藏”图标即可保存;2、进入“我的”-“收藏夹”创建自定义分类文件夹;3、长按收藏条目选择“移动到”指定文件夹实现归档;4、通过左滑或长按操作可编辑或删除收藏内容,便于高效整理与查找。 如果您在使用神马搜索App时,希望将…

    2026年9月30日 • 用户投稿
    000
  • iCloud官网怎么使用iCloud网页版_iCloud网页版功能教程

    iCloud官网怎么使用iCloud网页版_iCloud网页版功能教程iCloud官网怎么使用iCloud网页版_iCloud网页版功能教程iCloud官网怎么使用iCloud网页版_iCloud网页版功能教程iCloud官网怎么使用iCloud网页版_iCloud网页版功能教程

    首先登录iCloud网页版,进入后可使用邮件收发、查找设备、访问云盘及管理照片功能,具体操作包括撰写邮件、定位设备、预览下载文件和同步浏览照片。 如果您希望在电脑或其他设备上访问您的iCloud数据,但无法使用苹果设备的本地应用,可以通过iCloud网页版直接在浏览器中管理您的信息。以下是使用iCl…

    2026年9月30日 • 用户投稿
    400
  • 想要上淘宝首页,不如下这几招

    想要上淘宝首页,不如下这几招想要上淘宝首页,不如下这几招想要上淘宝首页,不如下这几招想要上淘宝首页,不如下这几招

    1、通过手机桌面点击淘宝App图标,启动后自动进入首页或手动点击底部“首页”标签;2、使用浏览器访问taobao.com进入网页版首页;3、在微信小程序搜索“淘宝”并打开官方小程序快速访问;4、若页面异常,可清除应用缓存后重启App恢复正常。 如果您尝试进入淘宝的首页,但无法找到正确的入口或页面加载…

    2026年9月30日 • 用户投稿
    100
  • Java中CopyOnWriteArrayList和CopyOnWriteArraySet入门

    答案:CopyOnWrite机制通过写时复制实现线程安全,读操作无锁且高效,适用于读多写少场景;CopyOnWriteArrayList和CopyOnWriteArraySet分别作为List和Set的并发实现,底层采用数组复制保证线程安全,但写操作开销大,不适合频繁修改或大数据量场景。 在多线程编…

    2026年9月30日
    200

发表回复

登录后才能评论
关注微信