在 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/10/17 16:50:56 阅读更多 →
OpenAI开发者直播技术解析:从API调用到生产级AI应用落地

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

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

2026/10/17 23:45:37 阅读更多 →
Buz:用现代 Zig 实现的 Bun 替代方案,增量构建时间低于 1 秒!

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

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

2026/10/17 23:46:24 阅读更多 →

最新新闻

基于YOLOv10的车辆类型识别检测系统实战:从数据集训练到UI界面部署

基于YOLOv10的车辆类型识别检测系统实战:从数据集训练到UI界面部署

前阵子做模拟项目X的时候,我需要一个能自动识别车辆类型的模块,用在停车场的出入口道闸:车来了,不仅要判断“有没有车”,还要认出这是小轿车、SUV、面包车、卡车还是公交车。这套需求听起来简单,真做起来牵…

2026/10/18 18:34:00 阅读更多 →
BP神经网络与声发射参数在试件损伤识别中的应用实践

BP神经网络与声发射参数在试件损伤识别中的应用实践

基于BP神经网络与声发射参数的试件损伤识别,猛一看像论文题目,真上手之后会发现它是一条很实用的故障预判路径。我前段时间配合团队处理一批金属试件的疲劳试验数据,最头疼的不是采集,而是怎么准确判断试件当前到底处于什么损伤状…

2026/10/18 18:34:00 阅读更多 →
基于YOLOv8的口罩佩戴检测系统:从数据标注到部署的完整实践

基于YOLOv8的口罩佩戴检测系统:从数据标注到部署的完整实践

1. 项目分析:为什么2024年的毕设还在做口罩检测先说个真实的直觉:很多人听到“口罩检测”第一反应是“这不是早就做烂了吗”。但如果你把这个题目放在毕业设计的语境里重新审视,会发现它依然是一道非常经典的综合性考题——它几乎涵盖了计算机…

2026/10/18 18:34:00 阅读更多 →
Octop运维自动化实战:声明式编排与批量任务管理

Octop运维自动化实战:声明式编排与批量任务管理

1. 从零认识 Octop:一个被低估的运维自动化利器第一次看到 Octop 这个名字,很多人会联想到章鱼——八条触手,灵活、多线程、能同时处理多个方向的任务。这个命名其实非常贴切,因为 Octop 本质上就是一个面向多节点、多任务的自动化…

2026/10/18 18:34:00 阅读更多 →
阿里云、腾讯云 CDN 和维科云怎么搭配?出海双线加速说明

阿里云、腾讯云 CDN 和维科云怎么搭配?出海双线加速说明

阿里云、腾讯云 CDN 和维科云怎么搭配?出海双线加速说明 一句话结论: 已备案、用户在大陆 → 国内云 CDN 仍是主力。未备案或海外节点加速、要高防 → 在境外侧引入 维科云 Veikor CDN 或 Cloudflare 等。常见架构是 「国内云 CDN 海外高防/优化 CDN」&…

2026/10/18 18:33:59 阅读更多 →
MoltBot + Bocha:为开源大模型快速接入联网搜索增强

MoltBot + Bocha:为开源大模型快速接入联网搜索增强

在本地把开源模型跑起来之后,很多人都会遇到同一个问题:模型会答,但不会“查”。它不知道今天天气如何,不知道最新新闻,更不知道你问的那款产品现在卖多少钱。原因很简单——模型的知识有截止日期,而搜索是…

2026/10/18 18:32:59 阅读更多 →

日新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 0:55:02 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →