Quarkus REST API 返回 JSON 时去除额外的数组包装

quarkus rest api 返回 json 时去除额外的数组包装

正如摘要中所述,本文将探讨如何在使用 Quarkus 构建 REST API 时,避免返回 JSON 数据时出现额外的数组包装。当使用 Multi 作为返回类型,并指定 MediaType.APPLICATION_JSON 时,Quarkus 默认会将所有结果收集到一个列表中,然后将该列表作为 JSON 数组返回。这可能不是我们期望的行为,特别是当我们需要返回一个单独的 JSON 对象时。

问题描述

在 Quarkus REST API 中,如果使用 Multi 来返回 JSON 数据,可能会遇到响应被额外的数组包装的情况。例如,以下代码:

  @Path("/testData")  @GET  @Produces(MediaType.APPLICATION_JSON)  public Multi  test() throws IOException {      return Multi.createFrom().items(IOUtils.toString(getClass().getResourceAsStream("/TestJSON.json"), StandardCharsets.UTF_8));  }

假设 TestJSON.json 文件的内容如下:

{  "isA": "customerDocument",  "createdOn": "2022-10-10T12:29:43",  "customerBody": {    "customerList": [      {        "name": "Batman",        "age": 45,        "city": "gotham"      }    ]  }}

实际的响应结果会变成:

[  {    "isA": "customerDocument",    "createdOn": "2022-10-10T12:29:43",    "customerBody": {      "customerList": [        {          "name": "Batman",          "age": 45,          "city": "gotham"        }      }    }  }]

可以看到,原始的 JSON 对象被一个额外的数组包装。

解决方案

为了避免这种额外的数组包装,可以使用 @Stream(Stream.MODE.RAW) 注解。此注解指示 Resteasy 直接将每个值写入响应,而无需进行任何格式化。

Find JSON Path Online Find JSON Path Online

Easily find JSON paths within JSON objects using our intuitive Json Path Finder

Find JSON Path Online 30 查看详情 Find JSON Path Online

  @Path("/testData")  @GET  @Produces(MediaType.APPLICATION_JSON)  @Stream(Stream.MODE.RAW)  public Multi  test() throws IOException {      return Multi.createFrom().items(IOUtils.toString(getClass().getResourceAsStream("/TestJSON.json"), StandardCharsets.UTF_8));  }

通过添加 @Stream(Stream.MODE.RAW) 注解,Resteasy 将不会收集所有值并将它们包装到列表中。而是将每个字符串直接写入响应流,从而避免了额外的数组包装。

原理解析

根据 Resteasy 的文档,如果没有 @Stream 注解,Resteasy 会收集 Multi 中的所有值,然后将它们包装到一个 java.util.List 实体中,并将其发送到客户端。而使用 @Stream(Stream.MODE.RAW) 注解后,每个值都会在可用时直接写入网络,无需任何格式化。

注意事项

使用 @Stream(Stream.MODE.RAW) 注解不仅会改变响应的格式,还会影响 “reactivity”,即是否等待整个 Multi 完成生成值后再批量发送,还是逐个发送。这可能是一个重要的考虑因素,具体取决于应用程序的需求。

如果需要返回一个单独的 JSON 对象,并且不需要流式处理的特性,那么最好避免使用 Multi 作为返回类型。可以考虑直接返回一个 JSON 对象,例如使用 javax.json.JsonObject 或者自定义的 Java Bean。

总结

通过使用 @Stream(Stream.MODE.RAW) 注解,可以有效避免在使用 Quarkus 构建 REST API 时,Multi 返回类型导致的额外数组包装问题。这种方法提供了更灵活的流式响应处理,但也需要根据实际需求仔细考虑其影响。在选择返回类型时,应权衡流式处理的优势与直接返回 JSON 对象的简洁性。

以上就是Quarkus REST API 返回 JSON 时去除额外的数组包装的详细内容,更多请关注创想鸟其它相关文章!

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
数据库故障恢复和事务日志:MySQL vs. PostgreSQL
上一篇 2025年11月4日 03:44:55
win10显示器颜色不正常或偏黄怎么办_屏幕色彩校准与颜色配置文件管理
下一篇 2025年11月4日 03:45:05

相关推荐

  • 夸克浏览器在线访问通道 夸克官网快速链接入口

    夸克浏览器在线访问通道为https://www.quark.cn/,用户可通过该网址进入主页面进行网页跳转、内容查找,使用网盘服务、AI助手、多端同步、PPT生成、文档处理等智能工具,并支持个性化设置与云端资源管理。 夸克浏览器在线访问通道在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来夸…

    2026年9月8日
    100
  • 夸克AI智能平台官方网址 夸克AI主页智能助手直达访问链接

    夸克AI智能平台官方网址是https://www.quark.cn/,提供AI搜索、文档处理、图片生成与多轮问答功能,支持账号登录实现跨设备同步,并具备个性化推荐、主题定制及语音交互等服务。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 夸…

    2026年9月8日
    100
  • 夸克电脑浏览器怎么清除缓存_夸克浏览器缓存清理步骤

    清理夸克电脑浏览器缓存可解决页面加载异常、显示旧内容或运行缓慢问题。一、通过设置菜单清除:点击右上角菜单→设置→隐私与安全→清除浏览数据→勾选“缓存文件和图片”→选择时间范围→点击清除数据。二、使用快捷键方式:在主界面按下Ctrl+Shift+Delete→打开清除浏览数据对话框→选择时间范围并仅勾…

    2026年9月5日
    000
  • 夸克网盘美剧资源无删减(免费)入口 高清美剧资源夸克网盘完整观看地址

    对于众多美剧爱好者而言,能够观看到无删减、原汁原味的高清剧集是一种极致的享受。然而,要在海量的互联网信息中寻找到稳定、画质卓越且内容完整的资源并非易事。近年来,夸克网盘凭借其独特的优势,逐渐成为了广大剧迷们分享与收藏高清美剧的重要阵地。它不仅仅是一个存储工具,更是一个集成了高清播放、高速下载和资源聚…

    2026年9月5日
    000
  • 夸克网盘资源推荐直接看 欧美片资源夸克网盘直接看地址

    夸克网盘它能够轻松存储海量高清影视资源,摆脱了传统下载方式的繁琐与等待,用户可以随时随地通过网络在线观看,享受即点即播的流畅体验。这种方式尤其适合收藏体积较大的欧美大片,无论是经典系列还是最新力作,都能被妥善整理和保存,通过一个账号,就能在手机、电脑、平板等多个设备上无缝衔接,极大地提升了观影的便捷…

    2026年9月5日
    000
  • deepseek中文官网入口

    Deepseek 是一款旨在增强网络安全和隐私的创新搜索引擎。与传统搜索引擎不同,Deepseek 在注重用户隐私和数据保护的同时提供准确的搜索结果。该平台利用先进的加密技术和匿名化协议,确保用户搜索活动的保密性。Deepseek 还在其搜索结果中无缝集成分散式网络,允许用户访问传统搜索引擎难以触及…

    2026年9月4日
    200
  • deepseek手机安装包分享

    深海搜索软件 deepseek 目前仅可通过深度极客邀请码或授权经销商获取安装包。安装过程分为两步:首先,通过以上渠道获取安装包;其次,按照手机提示授予权限并完成安装即可。需要注意,deepseek 对手机系统版本有最低要求,在使用过程中也需要保持网络连接。遇到问题时,可参考官方故障排除指南或联系客…

    2026年9月4日
    100
  • deepseek苹果手机版怎么下载

    deepseek 苹果手机版下载指南要下载 deepseek 苹果手机版,请按照以下步骤操作:访问官方网站并点击“下载”按钮。选择“Apple Store”选项。在 App Store 中点击“获取”。输入 Apple ID 密码。下载将自动开始。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索…

    2026年9月4日
    100
  • deepseek手机版app在哪里下载?

    本文将提供关于如何下载 DeepSeek 手机版应用程序的详细指南。此应用程序是一款强大的搜索引擎,它提供了许多独特的特性和优势,本文将深入探讨其主要功能,并提供分步说明,帮助您轻松获取该应用程序。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜…

    2026年9月4日
    100
  • deepseek app下载华为教程

    摘要:Deepseek是一款深受广大用户欢迎的多功能搜索引擎应用。本指南将详细介绍如何将Deepseek app下载到华为设备上。无论是初学者还是有经验的用户,都能轻松按照本指南,在手机或平板电脑上安装并使用Deepseek。安装过程简单快捷,只需几个简单的步骤即可完成。本指南配有清晰的截图,帮助您…

    2026年9月4日
    000
  • 夸克浏览器网页版在线进入 夸克浏览器官网地址直接进入

    夸克浏览器凭借其极简的设计理念、超快的浏览速度和智能化的功能,已成为许多用户在移动设备上的首选浏览器。它以强大的广告过滤、高效的文件管理以及人性化的信息聚合服务,提供了更纯粹的上网体验。对于需要在桌面端或特定场景下访问夸克浏览器服务、获取官方信息或使用其网页版功能的用户,了解正确的官方入口至关重要。…

    2026年8月31日
    100
  • 夸克的神秘电影入口 夸克浏览器进入私人影院入口

    夸克浏览器作为一款以极简设计和智能搜索为核心的次世代工具,早已超越了传统浏览器的范畴。它不仅仅是信息获取的窗口,更凭借其强大的内核与集成的多功能模块,为用户悄然构建了一个专属的私人影院。在这个空间里,用户可以摆脱繁杂广告的干扰,通过其独特的智能检索技术,高效触达全网海量的影视资源,享受沉浸式、纯净且…

    2026年8月31日
    100
  • 如何在IbexaDXP中实现强大的数据持久化,Composer助你轻松搭建内容平台

    最近在开发一个处理用户提交数据的程序时,遇到了一个棘手的问题:用户输入的文本中包含各种非ASCII字符,例如中文、日文、特殊符号等等。这些字符导致程序在处理字符串时效率低下,甚至出现错误。为了解决这个问题,我尝试了多种方法,最终找到了voku/portable-ascii这个库。Composer在线…

    用户投稿 2026年8月26日
    100
  • 告别分页参数的重复处理:eonx-com/easy-pagination助你实现优雅的统一分页管理

    可以通过一下地址学习composer:[学习地址](https://pan.quark.cn/s/371f7205c512] 嘿,各位 php 开发者!你是不是也曾被分页功能折磨得焦头烂额? 想象一下这样的场景:你正在为一个复杂的后台系统开发一系列 API 接口,每个接口都涉及到列表数据的展示,而这…

    用户投稿 2026年8月26日
    000
  • 如何使用guzzlehttp/promises优雅地解决PHP中的异步操作与并发难题

    Composer在线学习地址:[学习地址](https://pan.quark.cn/s/371f7205c512] 最近在开发一个电商后台服务时,我遇到了一个典型的性能瓶颈。我们的系统需要在一个请求中,同时从用户服务获取用户信息、从商品服务获取商品详情、再从库存服务查询库存量,最终整合数据后返回。…

    用户投稿 2026年8月26日
    000
  • 优化 Phaser.js 中多物理群组的碰撞检测机制

    本教程旨在介绍如何高效地管理 phaser.js 游戏引擎中多个物理群组间的碰撞检测。针对传统逐对定义碰撞的冗余问题,我们将展示如何利用 this.physics.add.collider() 方法接收数组参数的特性,大幅简化代码结构,提高可读性和维护性,特别适用于群组间存在广泛交互的场景。 传统碰…

    2025年12月21日
    000
  • Phaser.js中高效管理多物理组碰撞器:利用数组简化代码

    本教程探讨phaser.js中处理多个物理组之间碰撞的优化方法。针对传统重复调用`this.physics.add.collider`的冗长问题,我们将介绍如何利用`collider`方法的数组参数,大幅简化代码结构,提高可读性和维护性,尤其适用于存在大量碰撞组的场景,实现更简洁高效的碰撞检测配置。…

    2025年12月21日
    000
  • Phaser.js 中高效管理多组物理碰撞器

    在Phaser.js中处理多个物理组之间的碰撞时,频繁调用`this.physics.add.collider`会导致代码冗长且难以维护。本文将介绍一种高效且简洁的方法,通过将需要碰撞的物理组聚合到数组中,并将其作为参数传递给`this.physics.add.collider`,从而显著简化碰撞检…

    2025年12月21日
    000
  • Phaser.js中多物理组碰撞检测的高效管理与优化策略

    本文旨在解决phaser.js游戏中多物理组间碰撞检测配置冗余的问题。通过深入解析`this.physics.add.collider`方法的灵活用法,特别是其支持数组参数的特性,展示如何将多个单独的碰撞器声明优化为简洁高效的代码。这不仅能大幅提升代码的可读性和可维护性,也为未来扩展更多物理组提供了…

    2025年12月21日
    000
  • Phaser.js 物理碰撞器优化:高效管理多组交互

    本教程探讨如何在 phaser.js 游戏中高效配置多个物理组之间的碰撞检测。针对传统方法中大量重复的 `this.physics.add.collider()` 调用,我们将介绍如何利用 `collider()` 方法支持数组参数的特性,以简洁、可扩展的方式实现多组间的全面碰撞,显著减少代码量并提…

    2025年12月21日
    000

发表回复

登录后才能评论
关注微信