从 1.0 移动到 2.0 时出现“application/xml”错误的 HttpEntity
HttpEntity with `application/xml` errors when moving from 1.0 to 2.0
我对 akka 的了解不多,但是 HttpEntity
处理字符串的方式有什么变化吗?
我目前正在使用 akka-http 1.0,但想升级到 2.0 并开始使用 Source.queue
功能。我正在按照 this blog 中概述的步骤进行操作,这些步骤是我从类似的 Stack Overflow 问题中获得的。我已经能够实现博客 post 中的所有内容。但是,更新到 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
。
这是 HttpRequest for 1.0 的完整代码块,目前可以正常工作:
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
,因此可以在响应实体上使用它。
我对 akka 的了解不多,但是 HttpEntity
处理字符串的方式有什么变化吗?
我目前正在使用 akka-http 1.0,但想升级到 2.0 并开始使用 Source.queue
功能。我正在按照 this blog 中概述的步骤进行操作,这些步骤是我从类似的 Stack Overflow 问题中获得的。我已经能够实现博客 post 中的所有内容。但是,更新到 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
。
这是 HttpRequest for 1.0 的完整代码块,目前可以正常工作:
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
,因此可以在响应实体上使用它。