Bar*_*rry 1 json scala akka-http
我有一个端点,我们可以调用/test内部从第三方API获取数据,然后想要在返回响应之前进行一些转换.我挂断的地方是这个第三方API正在返回gzip压缩的JSON,我还无法解码它(还).我找到了decodeRequest指令,但似乎我必须在我的路由中使用它,我在这里更深层次.我有一个内部方法,一旦我收到一个GET到我的端点/test,这个方法被命名为do3rdPartyAPIRequest 我建立一个HttpRequest并传递给 Http().singleRequest()我,然后作为回报,我有一个Future[HttpResponse]我认为我想成为的地方,但我被困在这里.
使用我以类似的方式构建和使用的一些本地API,我没有对我的响应进行编码,因此我通常会Future[HttpResponse]检查响应状态并转换为JSON,Unmarshal但是在转换为之前,这需要一个额外的步骤. JSON.我意识到这个问题与这个问题非常相似,但这是喷涂特定的,我无法将此答案翻译成当前的akka http
终于搞清楚了 - 这可能不是绝对最好从响应中获取字节串但它的工作原理..结果你可以使用Gzip类
你有两个选择
Gzip.decodeGzip.decoderFlow以下是我的示例,以防这对您有所帮助:
def getMyDomainObject(resp: HttpResponse):Future[MyDomain] = {
for {
byteString <- resp.entity.dataBytes.runFold(ByteString(""))(_ ++ _)
decompressedBytes <- Gzip.decode(byteString)
result <- Unmarshal(decompressedBytes).to[MyDomain]
} yield result
}
def getMyDomainObjectVersion2(resp:HttpResponse):Future[MyDomain] = {
resp.entity.dataBytes
.via(Gzip.decoderFlow)
.runWith(Sink.head)
.flatMap(Unmarshal(_).to[MyDomain])
}
Run Code Online (Sandbox Code Playgroud)