You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Pekko HTTP提取请求体字符串丢失引号问题求助

解决Apache Pekko HTTP提取请求体丢失引号的问题

问题根源

你遇到的引号丢失问题,核心原因是curl请求未正确传递带引号的JSON内容,而非Pekko HTTP的提取逻辑错误。默认情况下,curl的-d参数会将数据以application/x-www-form-urlencoded格式发送,可能导致JSON结构被意外解析;同时若shell环境对引号处理不当,也会导致原始JSON的引号被丢弃。

解决方案

1. 修正curl请求命令

必须指定Content-Type: application/json头,确保请求体被当作JSON格式传递,同时正确包裹JSON内容:

  • Linux/macOS(bash/zsh环境):
curl -X POST http://localhost:9090/account -H "Content-Type: application/json" -d '{"account":{"name":"TESTE"}}'
  • Windows CMD环境:
curl -X POST http://localhost:9090/account -H "Content-Type: application/json" -d "{\"account\":{\"name\":\"TESTE\"}}"

2. 优化Pekko HTTP路由代码

原始代码使用Await会导致阻塞,不符合Pekko的非阻塞设计原则,建议改用异步方式提取请求体:

方式一:使用extractRequest异步处理

post {
  path("account") {
    extractRequest { request =>
      request.entity.toStrict(1.second).map { strictEntity =>
        val body = strictEntity.data.utf8String
        println(body)
        complete(StatusCodes.OK)
      }
    }
  }
}

方式二:直接用entity(as[String])提取(更简洁)

post {
  path("account") {
    entity(as[String]) { body =>
      println(body)
      complete(StatusCodes.OK)
    }
  }
}

验证逻辑

只要curl发送的请求体包含完整带引号的JSON,上述两种代码方式都能提取到保留引号的原始字符串。你可以通过打印请求头的方式验证:比如在路由中添加extract(_.request.headers),确认Content-Type是否为application/json。

内容的提问来源于stack exchange,提问作者user670097

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:17:07