0

我正在尝试使用 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 格式的。我该如何解决/改变它?

PS我是新来的API调用,所以这个问题很可能不是很清楚,我不知道。任何帮助将非常感激。

4

1 回答 1

1

而不是像这样的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,您可以使用适当的 JSON 序列化库,例如upickle,然后可以像这样提供 body

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(...)))
于 2020-05-03T00:08:43.160 回答