Я реализую внешний API, где мне нужно отправить вложение файла, связанное с мета-частью JSON.
Следующий код не принимается сервером, поскольку Play жестко кодирует тип контента от DataPart
до text/plain
, и сервер ожидает application/json
val meta = Json.obj(
"name" -> s"Invoice ${invoiceNumber}.pdf",
"referenceType" -> "INVOICE",
"referenceId" -> 42
)
ws.url("{API-URL}")
.addHttpHeaders("Authorization" -> s"Bearer ${accessToken}")
.post(Source(DataPart("meta", meta.toString) :: FilePart("file", s"Invoice ${invoiceNumber}.pdf", Option("application/pdf"), FileIO.fromPath(file.toPath)) :: List()))
.map(res => {
logger.debug("Status: " + res.status)
logger.debug("JSON: " + res.json)
Right(invoiceNumber)
})
Пример команды curl (которую я тестировал и проверял) для конечной точки API:
curl -H "Authorization: Bearer {accessToken}" \
-F 'meta={"name": "Invoive 4.pdf", "referenceType": "INVOICE", "referenceId": 42 } \
;type=application/json' \
-F "file=@Invoice.pdf" \
'{API-URL}'
Есть ли простой способ заставить DataPart
использовать другой тип контента или использовать другую часть, чтобы получить больший контроль над тем, что я посылаю?