web-dev-qa-db-ja.com

jspファイルでContent-Typeをapplication / jsonに設定します

応答として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");

この例では?

36
Julias

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タイプと文字エンコード。 JSPコンテナに有効な任意のMIMEタイプまたは文字セットを使用できます。デフォルトのMIMEタイプはtext/htmlで、デフォルトの文字セットはISO-8859-1です。

67
Pau Kiat Wee

このコードを試してください、それも動作するはずです

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

@Petr Mensik&Kensen John

おかげで、いくつかのURLパラメータに従って異なるコンテンツタイプを設定する必要があるため、pageディレクティブを使用できませんでした。 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」の場合

3
Gael