【问题标题】:Set Content-Type to application/json in jsp file在 jsp 文件中将 Content-Type 设置为 application/json
【发布时间】:2012-05-22 16:07:40
【问题描述】:

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

在这个例子中?

【问题讨论】:

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


    【解决方案1】:

    您可以通过Page directive 进行操作。

    例如:

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

    JSP 文件使用的 MIME 类型和字符编码 它发送给客户端的响应。您可以使用任何 MIME 类型或 对 JSP 容器有效的字符集。默认 MIME 类型为 text/html,默认字符集为 ISO-8859-1。

    【讨论】:

    • 链接失效
    【解决方案2】:

    试试这段代码,它应该也可以工作

    <%
        //response.setContentType("Content-Type", "application/json"); // this will fail compilation
        response.setContentType("application/json"); //fixed
    %>
    

    【讨论】:

    • 但这会引发类似 java.lang.IllegalStateException 的异常:getOutputStream() 已为此响应调用
    • 确保在调用setContentType(..)之前不向客户端输出任何单个字符(否则在此之前内容类型已经固定)。尤其要注意 %> 之后的空格或换行符,例如将第一行的结束 %> 移动到第二行,并立即从下一个
    【解决方案3】:

    @Petr Mensik 和肯森约翰

    谢谢,我不能使用 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”

    【讨论】:

    • 谢谢,我正在寻找类似的东西
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 2017-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多