Установите Content-Type для application/json в файле jsp
Я создал некоторый файл 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 ответа
Вы можете сделать это через директиву Page.
Например:
<%@ page language="java" contentType="application/json; charset=UTF-8"
pageEncoding="UTF-8"%>
- contentType = "mimeType [; charset = characterSet]" | "Текст / HTML, кодировка =ISO-8859-1"
Тип MIME и кодировка символов, которые JSP-файл использует для ответа, отправляемого клиенту. Вы можете использовать любой тип MIME или набор символов, которые допустимы для контейнера JSP. Тип MIME по умолчанию - text / html, а набор символов по умолчанию - ISO-8859-1.
Попробуйте этот кусок кода, он тоже должен работать
<%
//response.setContentType("Content-Type", "application/json"); // this will fail compilation
response.setContentType("application/json"); //fixed
%>
@ Петр Менсик и Кенсен Джон
Спасибо, я не смог использовать директиву 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"