応答として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");
この例では?
Page directive でできます。
例えば:
<%@ page language="Java" contentType="application/json; charset=UTF-8"
pageEncoding="UTF-8"%>
JSPファイルがクライアントに送信する応答に使用するMIMEタイプと文字エンコード。 JSPコンテナに有効な任意のMIMEタイプまたは文字セットを使用できます。デフォルトのMIMEタイプはtext/htmlで、デフォルトの文字セットはISO-8859-1です。
このコードを試してください、それも動作するはずです
<%
//response.setContentType("Content-Type", "application/json"); // this will fail compilation
response.setContentType("application/json"); //fixed
%>
@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」の場合