39

json文字列を応答として返すjspファイルを作成しました。しかし、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");

この例では?

4

3 に答える 3

69

Page ディレクティブを介して行うことができます。

例えば:

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

JSP ファイルがクライアントに送信する応答に使用する MIME タイプと文字エンコード。JSP コンテナーで有効な任意の MIME タイプまたは文字セットを使用できます。デフォルトの MIME タイプは text/html で、デフォルトの文字セットは ISO-8859-1 です。

于 2012-05-15T07:12:39.577 に答える
12

このコードを試してみてください。これも機能するはずです

<%
    //response.setContentType("Content-Type", "application/json"); // this will fail compilation
    response.setContentType("application/json"); //fixed
%>
于 2012-05-15T07:13:58.023 に答える
3

@Petr Mensik & ケンセン・ジョン

ありがとうございます。いくつかの 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」を使用

于 2013-10-23T03:15:51.567 に答える