[英]Handling and manipulating a list of http responses
我目前正在嘗試實現 API 邏輯以從服務器獲取多個圖像。 此服務器接受圖像 ID 並返回 HTTP 響應,其中包含 PNG 格式的圖像作為實體。
現在,我們要添加一個新的端點,它接受圖像 ID 列表並返回所有圖像的列表:
我做了以下事情:
def getImagesFromIds(IdsList: List[String]): Future[List[HttpResponse]] = {
Future.sequence {
IdsList.map(
id => getImageById(id)
)
}
}
這個 function 將收到一個 id 列表,並將調用 getImageById 來獲取所有圖像,它將返回一個 HttpResponse 列表。
對於路線定義,我做了以下工作:
def getImagesByIdsListRoute: Route = get {
path("by-ids-list") {
entity(as[List[String]]){
upcs =>
complete(getImagesFromIds(upcs))
}
}
}
但我收到以下錯誤消息:
沒有找到參數 m 的隱式:marshalling.toresponsemarshallable[list[httpresponse]]
有沒有人知道我們如何編組 http 響應列表,或者是否有任何方法可以改進此邏輯以獲取多個 http 響應?
如果我理解正確的話,你想要下載多張圖片並將它們作為 HTTP 響應返回。
getImageById
調用 API 返回一個HttpResponse
。 您無法確定這個 API 調用的結果是什么。 如果失敗,響應將根本不包含任何圖像。List[HttpResponse]
作為您的響應。 這個響應應該如何序列化? Akka 不知道你的意思,並試圖找到一個將序列化你的 object (例如到 JSON)但找不到的編組器。getImageById
以便它檢查HttpResponse
中的內容並返回實體字節。例子:
response match {
case HttpResponse(StatusCodes.OK, _, entity, _) =>
entity.dataBytes
case resp @ HttpResponse(code, _, _, _) =>
// Response failed and we don't care about the response entity
// Details: https://doc.akka.io/docs/akka-http/current/implications-of-streaming-http-entity.html
resp.discardEntityBytes()
// Decide yourself how you want to handle failures
throw new RuntimeException("Request failed, response code: " + code)
}
dataBytes
返回一個Source
所以你最終會得到一個List
of Sources
。 您必須通過連接它們,例如通過concat
。Compression.gzip
。getImagesByIdsListRoute
的complete
方法中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.