Конечная точка HTTP Scalaj, для которой требуется тело в формате JSON
Я пытаюсь отправить запрос POST с помощью scalaj, но получаю следующую ошибку
{"code":40010000,"message":"request body format is invalid"} java.lang.Exception: HTTP ERROR: 400
Я пытаюсь получить доступ к API-интерфейсу Alpaca Broker, чтобы сделать заказ, и мой код выглядит следующим образом
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, поэтому вполне возможно, что этот вопрос не очень ясен, и я не знаю. Любая помощь приветствуется.
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, а затем тело может быть предоставлено следующим образом
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(...)))