需要 JSON 格式正文的 Scalaj HTTP 端点

Scalaj HTTP endpoint that requires a JSON-formatted body

我正在尝试使用 scalaj 发出 POST 请求,但出现以下错误

{"code":40010000,"message":"request body format is invalid"} java.lang.Exception: HTTP ERROR: 400

我正在尝试访问 Alpaca Broker API 来下订单,我的代码如下所示

val response: HttpResponse[String] = Http(s"$endpoint/v2/orders").
  headers(Map(AlpacaInfo.key_header->key, AlpacaInfo.secret_header->secret)).
  params(Map("symbol"->symbol, "qty"->qty, "side"->side, "type"->`type`, "time_in_force"->time_in_force) ++ parameters).
  method("POST").asString

我的 GET 请求按预期工作 我只是在使用 POST 时遇到了问题。在羊驼讨论中有人说这可能是因为编码不是 JSON 格式。我怎么能fix/change那个?

P.S。我是进行 API 调用的新手,所以这个问题很可能不是很清楚而且我不知道。任何帮助将非常感激。

而不是params尝试postData这样的方法

val body =
  s"""
     |{
     |  "symbol": "$symbol",
     |  "qty": $qty,
     |  "type": "$`type`",
     |  "time_in_force": "$time_in_force"
     |}
     |""".stripMargin


Http(...)
  .headers(...)
  .postData(body)
  .method("POST")
  .asString

您可以使用适当的 JSON 序列化库,例如 upickle,而不是使用原始字符串来表示 JSON,然后可以像这样提供正文

import upickle.default._
case class MyModel(symbol: String, qty: Int, `type`: String, time_in_force: String)
implicit val configRW: ReadWriter[Config] = macroRW

Http(...)
  .postData(write(MyModel(...)))