【发布时间】:2014-03-27 18:57:28
【问题描述】:
我有一个使用 javax ws 注释定义的 Web 服务来定义服务端点,如下所示:
@GET
@Path("eventBir")
@Produces(MediaType.APPLICATION_XML)
public String getEventsBir(
@QueryParam("applicationId") String applicationId);
响应可能包含被编码为不正确的外来字符。
离开上述服务时的部分响应示例:
<Market name="Apuestas con hándicap en vivo">
但是当它到达外部应用程序时,它正在以某种方式被编码以提供:
<Market name="Apuestas con hándicap en vivo">
我发现this website 似乎已经定义了我的确切问题。所以看起来我得到了一个 UTF-8 编码的字符串,并通过一些将其编码为 ISO-8859-1 的代码传递它。但是,我正在努力解决如何修复它。
在我的服务返回字符串后,该字符串通过我认为是 Spring 创建的代码传递,以包装 Web 服务。它也可能被网络服务器破坏,我不确定。
在返回字符串之前,我可以对字符串进行一些编码吗?或者是否可以设置一些 Spring 配置来将响应设置为 UTF-8 编码?
编辑:找到有问题的 Spring Class
看起来 Web 服务的 Spring 包装器中的违规类是 StringHttpMessageConverter
Here's the class 在 Grep 代码中
在“ISO-8859-1”这个类中定义了一个默认字符集,这就是解析响应的内容(在 UTF-8 中)所以我最终解决了上述问题。
所以现在我正在寻找解决此问题的好方法。
【问题讨论】:
-
你在哪个 servlet 容器上?
-
@SotiriosDelimanolis TC 服务器 2.9.4.RELEASE
-
我希望您发布一个小示例,我们可以重现您如何生成方法返回的对象。
-
@SotiriosDelimanolis 我在 Spring 中发现了有问题的课程。基本上,Spring 将 String 包装到 HTTP 响应中,并且该类使用导致我们问题的默认字符集。
-
您能否添加有关您的环境的更多详细信息?你用的是泽西岛吗?你能给我们你的 Spring 上下文配置吗?你能举一个
String你的getEventsBir退货的例子吗?
标签: java spring utf-8 character-encoding iso-8859-1