java - 从 1.0 迁移到 2.0 时,HttpEntity 出现 `application/xml` 错误

标签 java xml scala akka akka-http

我对 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)

不同类型不匹配的结果;期待 BinaryWithFixedCharset,但找到 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/

相关文章:

java - 在 IntelliJ 中使用 Java 8 构建 Scala(2.7.0) maven 项目时出现错误 "error while loading Consumer"

java - Java通用通配符打破类型界限

java - slf4j 记录器日志级别未正确继承

java - 检索 jtextfield 数据以与单击的复选框一起使用

c# - 如何从 Visual Studio 2003 中的调试器检查 XML 流

python - xml.etree.ElementTree.ParseError : not well-formed (invalid token) due to "<" symbol in script

javascript - XML Ajax 请求中请求的资源上不存在 'Access-Control-Allow-Origin' header

scala - 如何在Slick中设置MySQL连接的socketTimeout?

Scala:编译时间常数

java - 按水平顺序展开单元格?