Servlet以Base64格式意外返回响应

时间:2016-06-25 09:57:12

标签: java rest tomcat servlets solr

这是一个奇怪的行为,我在servlet根据我提供给Apache Solr的一些参数调用servlet来调用和提取数据时见证了这种行为。

servlet查询Solr并以json格式向我返回数据。然后通过放置System.out.println(response)进行验证。它只是json格式。

我的问题是,当我通过使用此服务的客户端收到相同的回复时,数据以Base64格式返回。在我的代码中,我甚至没有编写任何将响应转换为Base64的行。我在发送回复之前写的唯一一行是resp.setContentType("application/json")

虽然我后来通过在发送回复之前在resp.setCharacterEncoding("UTF-8");中设置servlet来解决此问题。然后,每次我在客户端或JSON查询时,我只收到REST client响应。但我仍在疑惑,为什么会发生这种情况,为什么以JSON servlet发送的回复会转换为Base64

之前有没有人经历过这样的事情?

我使用Apache Tomcat作为我的服务器。

1 个答案:

答案 0 :(得分:0)

这很可能是Java servlet框架的属性。您的Solr内容可能包含英语以外的Unicode范围内的字符。因此,该算法认为它实际上是一个二进制响应并将其编码为base64(可能具有更改的mime类型头)。

设置字符编码告诉框架,期望完整的字符范围,并且不需要转义。

或者这可能是在Tomcat中。但在我看来,文档搜索的重点应放在转义二进制内容上。