gpt4 book ai didi

json - 如何在 Akka HTTP 中将 `text/plain` 解码为 JSON

转载 作者:可可西里 更新时间:2023-11-01 15:19:49 25 4
gpt4 key购买 nike

我正在使用旧版 HTTP API(我无法更改),它在正文中响应 JSON,但提供 Content-Type: text/plain; charset=utf-8 header 。

我试图将该 HTTP 正文解码为 JSON,但出现以下异常:akka.http.scaladsl.unmarshalling.Unmarshaller$UnsupportedContentTypeException: Unsupported Content-Type, supported: application/json

我的代码是这样的:

import spray.json.DefaultJsonProtocol
import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._
import akka.http.scaladsl.unmarshalling._

case class ResponseBody(status: String, error_msg: String)

object ResponseBodyJsonProtocol extends DefaultJsonProtocol {
implicit val responseBodyFormat = jsonFormat2(ResponseBody)
}

def parse(entity: HttpEntity): Future[ResponseBody] = {
implicit val materializer: Materializer = ActorMaterializer()
import ResponseBodyJsonProtocol._
Unmarshal[HttpEntity](entity).to[ResponseBody]
}

示例 HTTP 响应如下所示:

HTTP/1.1 200 OK
Cache-Control: private
Content-Encoding: gzip
Content-Length: 161
Content-Type: text/plain; charset=utf-8
Date: Wed, 16 Dec 2015 18:15:14 GMT
Server: Microsoft-IIS/7.5
Vary: Accept-Encoding
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET

{"status":"1","error_msg":"Missing parameter"}

如何忽略 HTTP 响应中的 Content-Type 并将其解析为 JSON?

最佳答案

我发现的一个解决方法是在解码之前在 HttpEntity 上手动设置 Content-Type:

def parse(entity: HttpEntity): Future[ResponseBody] = {
implicit val materializer: Materializer = ActorMaterializer()
import ResponseBodyJsonProtocol._
Unmarshal[HttpEntity](entity.withContentType(ContentTypes.`application/json`)).to[ResponseBody]
}

似乎工作正常,但我对其他想法持开放态度...

关于json - 如何在 Akka HTTP 中将 `text/plain` 解码为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34319596/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com