我创建了一些jsp文件,它作为响应返回一些json字符串。但我发现Content-Type自动设置为txt
我的jsp代码看起来像
<%@ page import="java.util.Random" %>
<%@ page language="java" %>
<%@ page session="false" %>
<%
String retVal = "// some json string";
int millis = new Random().nextInt(1000);
// System.out.println("sleeping for " + millis + " millis");
Thread.sleep(millis);
%>
<%=retVal%>
如何执行
之类的操作setHeader("Content-Type", "application/json");
在这个例子中?
答案 0 :(得分:66)
您可以通过Page directive完成。
例如:
<%@ page language="java" contentType="application/json; charset=UTF-8"
pageEncoding="UTF-8"%>
JSP文件用于的MIME类型和字符编码 它发送给客户端的响应。您可以使用任何MIME类型或 对JSP容器有效的字符集。默认的MIME type是text / html,默认字符集是ISO-8859-1。
答案 1 :(得分:12)
尝试这段代码,它应该也可以使用
<%
//response.setContentType("Content-Type", "application/json"); // this will fail compilation
response.setContentType("application/json"); //fixed
%>
答案 2 :(得分:3)
@Petr Mensik&amp;肯森约翰
谢谢,我无法使用page指令,因为我必须根据某些URL参数设置不同的内容类型。我会在这里粘贴我的代码,因为它与JSON非常相似:
<%
String callback = request.getParameter("callback");
response.setCharacterEncoding("UTF-8");
if (callback != null) {
// Equivalent to: <@page contentType="text/javascript" pageEncoding="UTF-8">
response.setContentType("text/javascript");
} else {
// Equivalent to: <@page contentType="application/json" pageEncoding="UTF-8">
response.setContentType("application/json");
}
[...]
String output = "";
if (callback != null) {
output += callback + "(";
}
output += jsonObj.toString();
if (callback != null) {
output += ");";
}
%>
<%=output %>
提供回调时,返回:
callback({...JSON stuff...});
内容类型为“text / javascript”
如果未提供回调,则返回:
{...JSON stuff...}
内容类型为“application / json”