私は体内のJSONで応答するレガシーHTTP APIを使っていますが、Content-Type: text/plain; charset=utf-8
ヘッダーを付けています。AkkaのHTTPでJSONとして `text/plain`をアンマーシャリングする方法
私はJSONとしてそのHTTPボディをアンマーシャリングしようとしていますが、私は次の例外を取得: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"}
Content-Type
をHTTP応答で無視し、JSONとして解析するにはどうすればよいですか?
私は同様の問題があり、アンマーシャリングの最後のコード行を使用しました。なんらかの理由で、withContentTypeはエンティティを変更し、コンテンツタイプオブジェクトも含む厳密なエンティティに変換します。それから体を引き出す方法に関するアイデアは? –