在 Feign 调用 中模拟 Swagger 请求
在Feign 调用中模拟 Swagger 请求本质是构建一个与 Swagger 请求体完全一致的 JSON 字符串然后塞入 DTO 的data字段类型为Object。下面用Gson和Hutool两种方式给出完整代码示例。一、Swagger 中的 JSON 请求体示例假设你在 Swagger 中提交的 JSON 是json{ phone: 15921892280, templateCode: SMS_123456789, templateParam: { code: 1234, extra: { param: test } } }注意templateParam是一个嵌套 JSON 对象不是字符串。二、使用 Gson 构建相同的 JSON1. 构建嵌套的JsonObjectjavaimport com.google.gson.JsonObject; // 构建内层 extra JsonObject extra new JsonObject(); extra.addProperty(param, test); // 构建 templateParam JsonObject templateParam new JsonObject(); templateParam.addProperty(code, 1234); templateParam.add(extra, extra); // 嵌套对象 // 构建根对象 JsonObject root new JsonObject(); root.addProperty(phone, 15921892280); root.addProperty(templateCode, SMS_123456789); root.add(templateParam, templateParam);2. 转为 JSON 字符串javaString jsonString root.toString(); System.out.println(jsonString); // 输出: {phone:15921892280,templateCode:SMS_123456789,templateParam:{code:1234,extra:{param:test}}}3. 设置到 DTO 并调用 Feignjava// DTO 中的 data 字段是 Object MessageSendReq req new MessageSendReq(); req.setData(jsonString); // 传入 JSON 字符串 // Feign 调用 messageClient.sendMessage(req);三、如果 Swagger 中的templateParam是字符串而不是对象有些接口要求templateParam是JSON 字符串如阿里云短信此时 Swagger 请求体可能是json{ phone: 15921892280, templateCode: SMS_123456789, templateParam: {\code\:\1234\,\extra\:{\param\:\test\}} }这种情况下你需要先构建内部 JSON再转为字符串作为值java// 1. 构建内部对象 JsonObject inner new JsonObject(); inner.addProperty(code, 1234); JsonObject extra new JsonObject(); extra.addProperty(param, test); inner.add(extra, extra); // 2. 将内部对象转为 JSON 字符串 String innerJson inner.toString(); // {code:1234,extra:{param:test}} // 3. 构建根对象 JsonObject root new JsonObject(); root.addProperty(phone, 15921892280); root.addProperty(templateCode, SMS_123456789); root.addProperty(templateParam, innerJson); // 注意作为字符串传入 String finalJson root.toString();四、使用 Hutool更简洁推荐如果项目已引入 Hutool可以更直观地构建javaimport cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; // 构建内层 JSONObject extra JSONUtil.createObj() .put(param, test); JSONObject templateParam JSONUtil.createObj() .put(code, 1234) .put(extra, extra); // 构建根对象 JSONObject root JSONUtil.createObj() .put(phone, 15921892280) .put(templateCode, SMS_123456789) .put(templateParam, templateParam); // 转为字符串 String jsonString root.toString(); // 设置到 DTO req.setData(jsonString);五、JsonObject和String的区别关键点传入 DTO 的类型Jackson 序列化后的 HTTP BodySwagger 是否一致JsonObject❌ 序列化失败抛出异常—MapString, Object{data:{code:1234}}✅ 如果 Swagger 是对象则一致StringJSON 字符串{data:{\code\:\1234\}}⚠️ 如果 Swagger 是对象则多了引号结论你必须明确 Swagger 中data字段期望的是JSON 对象还是JSON 字符串。如果期望JSON 对象你应该传入Map或 POJO而不是String。如果期望JSON 字符串如阿里云短信则传入String。六、如何确认 Swagger 期望的类型查看 Swagger 的请求体示例如果显示为{ code: 1234 }→ 是JSON 对象如果显示为{\code\:\1234\}→ 是JSON 字符串根据你的情况阿里云短信的TemplateParam是字符串所以用jsonObject.toString()是正确的。七、完整调用示例Gson 版javapublic void sendSms() { // 1. 构建参数 JsonObject param new JsonObject(); param.addProperty(code, 1234); param.addProperty(phone, 15921892280); // 如果有嵌套 JsonObject extra new JsonObject(); extra.addProperty(type, notification); param.add(extra, extra); // 2. 转为 JSON 字符串因为阿里云要求 TemplateParam 是字符串 String templateParamStr param.toString(); // 3. 构建请求 DTO MessageSendReq req new MessageSendReq(); req.setPhone(15921892280); req.setTemplateCode(SMS_123456789); req.setData(templateParamStr); // 传入字符串 // 4. Feign 调用 try { MessageSendResp resp messageClient.sendMessage(req); System.out.println(发送成功: resp); } catch (Exception e) { System.err.println(发送失败: e.getMessage()); } }八、总结步骤操作1使用 Gson / Hutool 构建与 Swagger 格式一致的 JSON 结构2如果是阿里云短信调用toString()转为 JSON 字符串3将该字符串设置到 DTO 的data字段4通过 Feign 发送这样Feign 发送的请求体就与 Swagger 完全一致不会再有序列化错误。

相关新闻

连续批处理如何把推理 GPU 的空转时间填满

连续批处理如何把推理 GPU 的空转时间填满

推理压测里有一种很常见的现象:显存已经占得很高,请求也一直在排队,但 GPU 的计算单元并没有持续吃满。继续加机器只能线性增加成本,单卡吞吐却没有明显改善。 这时先别急着换模型或堆硬件。问题可能出在批处理的调度粒度——服务…

2026/7/25 18:06:39 阅读更多 →
OpenAI开发者直播技术解析:从API调用到生产级AI应用落地

OpenAI开发者直播技术解析:从API调用到生产级AI应用落地

如果你是一名开发者,最近可能已经注意到 OpenAI 的开发者直播活动正在密集进行。但这类直播到底值不值得花时间看?是纯宣传噱头,还是真有技术干货?更重要的是,作为开发者,我们如何从这些活动中提取真正能落…

2026/7/25 18:05:39 阅读更多 →
Buz:用现代 Zig 实现的 Bun 替代方案,增量构建时间低于 1 秒!

Buz:用现代 Zig 实现的 Bun 替代方案,增量构建时间低于 1 秒!

【项目发布】2026 年 7 月 24 日上午 5:58,jazzzooo 发布了 [Buz - 使用现代 Zig 实现的 Bun 替代方案,增量构建时间低于 1 秒]。该项目是其正在开发的 Bun 分支,基于 Bun 用 Rust 重写之前的最后一次提交,目前仍处于早期开发阶段…

2026/7/25 18:05:39 阅读更多 →

最新新闻

2026年GEO优化监测工具性价比榜:4款主流产品深度测评,避开90%的选型坑

2026年GEO优化监测工具性价比榜:4款主流产品深度测评,避开90%的选型坑

2026 年,AI 问答平台成为品牌线上获客核心阵地,用户通过豆包、DeepSeek、文心一言等 AI 产品检索品牌、产品信息的规模较 2025 年实现明显增长。GEO 全域监测工具作为布局 AI 流量的核心配套载体,被企业、营销服务商广泛应用。但市面上工具品…

2026/7/25 18:17:44 阅读更多 →
Windows、macOS、Linux与鸿蒙:四大操作系统内核架构与开发环境深度对比

Windows、macOS、Linux与鸿蒙:四大操作系统内核架构与开发环境深度对比

作为一个常年混迹于Windows、macOS、Linux,最近又入手了鸿蒙设备的开发者,我经常被问到一个问题:“这几个系统到底有啥区别?我该选哪个?” 这个问题看似简单,但背后涉及的是内核架构、设计哲学、应用生态和…

2026/7/25 18:17:44 阅读更多 →
GEO优化数据监测哪家性价比高?2026年四大主流产品横向测评

GEO优化数据监测哪家性价比高?2026年四大主流产品横向测评

随着生成式 AI 成为用户获取品牌信息的主流渠道,GEO 全域监测已经成为品牌数字营销、服务商项目交付的刚需。当下市场里 GEO 监测工具定价梯度跨度大、监测深度、配套功能差异明显,不少企业、营销服务商在选型时很难匹配自身业务预算与运营需求。本文围绕…

2026/7/25 18:17:44 阅读更多 →
从X11到Wayland:Linux图形栈演进与GXDE OS的deepin-mutter适配实践

从X11到Wayland:Linux图形栈演进与GXDE OS的deepin-mutter适配实践

如果你最近在 Ubuntu 24.04 上遇到了“腾讯会议暂不兼容,程序即将退出!”的弹窗,或者发现 vmware-user 服务启动失败,那么你很可能已经与一个名为 Wayland 的显示协议不期而遇了。这并非偶然,从 Ubuntu 22.04 开始,Wayland 已逐渐成为默认的显示服务器协议,而到了 2…

2026/7/25 18:17:44 阅读更多 →
YOLO双backbone目标检测模型设计与优化实践

YOLO双backbone目标检测模型设计与优化实践

1. 项目背景与核心思路在目标检测领域,YOLO系列模型因其出色的实时性能而广受欢迎。但传统单backbone结构在复杂场景下仍存在空间信息提取不足的问题。我们团队提出的双backbone改进方案,通过引入空间增强前馈网络(SEFN),实现了局部空间一致性…

2026/7/25 18:17:44 阅读更多 →
花椒智能分拣系统:基于QueryInst的杂质检测技术实践

花椒智能分拣系统:基于QueryInst的杂质检测技术实践

1. 项目背景与需求解析花椒作为我国重要的调味品和经济作物,其品质直接影响市场价值。在规模化种植场景中,采摘后的花椒常混入叶片、枝梗、石块、塑料等杂质,传统人工分拣方式效率低下且成本高昂。我们团队基于实际产线需求,开发了…

2026/7/25 18:16:44 阅读更多 →

日新闻

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存

突破文档下载限制:kill-doc让你看到的都能保存 【免费下载链接】kill-doc 看到经常有小伙伴们需要下载一些免费文档,但是相关网站浏览体验不好各种广告,各种登录验证,需要很多步骤才能下载文档,该脚本就是为了解决您的…

2026/7/25 0:00:35 阅读更多 →
C++ string类模拟实现:从深拷贝到内存管理的完整指南

C++ string类模拟实现:从深拷贝到内存管理的完整指南

1. 项目概述:为什么我们要“手撕”string类?在C的学习道路上,尤其是从C语言过渡到C的“初阶”阶段,string类绝对是一个绕不开的核心。标准库里的std::string用起来太方便了,、find、substr,几个操作符和函数…

2026/7/25 0:00:35 阅读更多 →
三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

三角洲寻宝鼠工具:高效文件搜索与资源管理实战指南

1. 先搞清楚“三角洲寻宝鼠”到底是什么工具从名称来看,“三角洲寻宝鼠”更像是一个资源查找或文件检索类工具,而不是游戏或娱乐软件。这类工具的核心价值在于帮助用户快速定位特定资源,比如文档、图片、压缩包或特定格式的文件。如果你经常需…

2026/7/25 0:00:35 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/25 5:08:22 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/25 5:13:53 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻