[英]JSON response is returning as text
我在我的 java servlet 中编写了如下的 JSON 响应,其中 JObject 是创建的 JSON 对象
response.setContentType("application/json; charset=UTF-8");
PrintWriter printout = response.getWriter();
printout.print(JObject);
printout.flush();
但它在接收方以文本/纯文本形式收到
[Server: Apache-Coyote/1.1, ETag: W/"XXXXXXXXXX", Last-Modified: Tue, 04 Jun 2013 10:42:31 GMT, Content-Type: text/plain, Content-Length: 2573, Date: Tue, 04 Jun 2013 10:44:01 GMT]
如何获得确切的 JSON 响应? 如果我在同一台机器上JSON
响应,我将获取 JSON 数据。 但是如果我在另一台服务器中JSON
响应,它会作为text/plain
返回。
这是JObject
:
JSONObject JObject = new JSONObject();
JObject.put("Response", "1");
JObject.put("Message", "Client unauthorized");
我不确定您在 servlet 中到底有什么代码。 但是我创建了一个示例 Servlet,它返回了与上述代码相同的 Json 输出。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("application/json; charset=UTF-8");
PrintWriter printout = response.getWriter();
JSONObject JObject = new JSONObject();
JObject.put("Response", "1");
JObject.put("Message", "Client unauthorized");
printout.print(JObject);
printout.flush();
// Or
// printout.write(JObject.toString());
}
我在浏览器上得到了{"Message":"Client unauthorized","Response":"1"}
作为输出。
这是结果快照:
response.getWriter().write(jsonObj.toString())
对我response.getWriter().write(jsonObj.toString())
。
我使用 Gson
Gson gson = new Gson();
String jsonData = gson.toJson(student);//here student is object
PrintWriter out = response.getWriter();
try {
out.println(jsonData);
} finally {
out.close();
}
如果您使用的是 Java 7 的 try-with-resources,请确保设置
response.setContentType("application/json");
在您尝试使用资源之前,因为如果您在之后设置它,它将事先关闭 PrintWriter 并且不会设置任何内容类型。 然后,如果它通过 nginx 服务器,当它注意到标题中没有设置时,它可能会将 contentType 设置为纯文本,这正是我的问题。
做这个:
response.setContentType("application/json");
try (PrintWriter out = response.getWriter()) {
out.println(jsonData);
}
不是这个:
try (PrintWriter out = response.getWriter()) {
out.println(jsonData);
}
// does not set contentType anymore because writer has been flushed already.
response.setContentType("application/json");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.