实现飞书群推送报错接口,critical复现curl

1.成果展示

Nacos 配 Webhook + 卡片内 Apifox 风格 curl(含 query / body / 响应 JSON)

左图apifox右图飞书群


2. 请求体有 Content-Type 却无 body的解决方法

text 复制代码
客户端(Apifox) → Gateway(Netty) → api-app(Tomcat) → GlobalExceptionHandler → 飞书
断点 现象 处理
Gateway GET/DELETE 带 body 时默认路由可能不转发 body ReproduceBodyPreserveGlobalFilter:join body 再装饰 getBody() + Content-Length
Tomcat GET 的 InputStream读不到 body(业务也不读) 网关读完后写内网头 X-Brain-Reproduce-Body-B64(≤24KB);api-app 解码写入 TraceContext
双层 Wrapper RequestTrace 内层有缓存,PlaintextDebugCapture 再包一层空外壳 不再往ContentCachingRequestWrapperreadCachedBody 沿链向内找;优先 TraceContext 字节快照

3. Apifox body 类型 → curl 片段

Body curl
Query 已在 URL ?key=value
JSON --data-raw '{"k":1}'(紧凑 JSON)
x-www-form-urlencoded --data-raw 'a=1&b=2'
multipart/form-data 解析 boundary → 多行 --form 'name="value"';文件用 --form 'f=@文件名'

实现:ReproduceRequestBodyCapture(字节+Content-Type) → MultipartFormParser / ApifoxCurlBodyAppender

预热:RequestTraceServletFilter 对「有 Content-Length / chunked / 有 Content-Type」尝试 readAllBytes();multipart 必须用字节,别先转 String。


4. 飞书展示层

问题 原因 处理
Accept: */*Accept: / 卡片 Markdown 吃掉 * 推送前 FeishuMarkdownEscaper\*
Connection 经网关常无此头 缺省补 keep-alive
--form 见 §2 body 未到 api-app 网关 relay + multipart 解析

对外 URL:X-Forwarded-Host / X-Forwarded-Protoxxx.xxxx.com,别用内网。


5. 避坑和安全设计

  • 发 dev不要用tar命令覆盖 ECS的配置文件.env(不然会把 NACOS_PASSWORD 冲成 nacos → 全链 403)。
  • reproduceBlock 可含 Authorization (仅飞书 critical,不进security_log 明文)。
相关推荐
葫芦和十三6 小时前
图解 MongoDB 11|慢查询排查闭环:从 Profile 到 explain 的分层路径
后端·mongodb·agent
葫芦和十三9 小时前
图解 MongoDB 09|explain 再读:从 queryPlanner 到 executionStats
后端·mongodb·agent
葫芦和十三9 小时前
图解 MongoDB 10|覆盖查询:让索引把活干完,根本不用回表
后端·mongodb·agent
大鸡腿同学11 小时前
从 CoT 思维链到 ReAct:智能 Agent 到底是怎么 “思考” 的?
后端
IT_陈寒12 小时前
Vite的静态资源打包让我熬夜到三点,这坑千万别跳
前端·人工智能·后端
SamDeepThinking13 小时前
高并发场景下,CompletableFuture与ForkJoinPool该如何取舍?
java·后端·面试
Asize14 小时前
多模态生图:从 Vite 工程化到前端调用 Qwen Image
javascript·人工智能·后端
java小白小14 小时前
SpringBoot(09):缓存实战——穿透、雪崩、击穿的解决方案
后端
java小白小14 小时前
SpringBoot(08):Redis 集成——5 分钟给你的项目加上缓存
后端
LiuMingXin14 小时前
意图与代码之间:AI编程范式全景解读
前端·后端·面试