Scalaj HTTP端点,需要一个JSON格式的体。

问题描述 投票:0回答:1

我试图使用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方面遇到了问题。在Alpaca的讨论中,有人说可能是因为编码不是JSON格式的。我怎么才能解决这个问题呢?

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

json scala http-post scalaj-http
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序列化库,例如。蚕茧然后,可以提供这样的身体

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(...)))
© www.soinside.com 2019 - 2024. All rights reserved.