在jsp文件中将Content-Type设置为application / json

时间:2012-05-15 07:07:58

标签: java http jsp http-headers content-type

我创建了一些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");

在这个例子中?

3 个答案:

答案 0 :(得分:66)

您可以通过Page directive完成。

例如:

<%@ page language="java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>
  • contentType =“mimeType [; charset = characterSet]”| “text / html的;字符集= ISO-8859-1”
  

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”