我对 akka 没有太多了解,但是 HttpEntity
处理字符串的方式发生了一些变化?
我目前使用的是 akka-http 1.0,但想升级到 2.0 并开始使用 Source.queue
功能。我正在按照this blog中概述的步骤进行操作我是从类似的 Stack Overflow 问题中找到的。我已经能够实现博客文章中的所有内容。然而,更新到 2.0 似乎破坏了我为 HttpEntity 所做的一切。目前,我在 akka-http 1.0 中的 HttpRequest
内部有以下声明:
entity = HttpEntity(MediaTypes.`application/xml`, xml)
其中 xml
是使用 XStream 创建的字符串。
当我转向 2.0 时,我收到来自 IDE 的警告,指出它无法解析具有此类签名的 HttpEntity,并且 MediaTypes 部分存在类型不匹配;期待一个 ContentType。
尝试通过以下方式将 MediaType 传递给 ContentType:
HttpEntity(ContentType(MediaTypes.`application/xml`), xml)
不同类型不匹配的结果;期待 Binary
或 WithFixedCharset
,但找到 WithOpenCharset
。
以下是 1.0 版 HttpRequest 的完整代码块,目前运行正常,没有问题:
httpReq = HttpRequest(method = HttpMethods.PUT,
uri = itemUri,
entity = HttpEntity(MediaTypes.`application/xml`, xml),
headers = List(apiH))
我需要为 2.0 的 xml 字符串实现自定义序列化程序或其他东西吗?
非常感谢这里的任何帮助。
最佳答案
text/xml
内容类型必须指示字符集,以便该信息的接收者知道如何正确解析它。如果您使用 UTF8,则可以简单地使用 ContentTypes.text/xml(UTF-8)
,因为它具有固定的字符集。如果您想使用不同的字符集(例如 ISO-8859-1),那么您可以执行以下操作:
MediaTypes.`text/xml`.withCharset(HttpCharsets.`ISO-8859-1` )
无论哪种方式,您最终都会得到 WithCharset
而不是 WithOpenCharset
,因此可以在响应实体上使用它。
关于java - 从 1.0 迁移到 2.0 时,HttpEntity 出现 `application/xml` 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35319359/