Задайте Content-Type для приложения /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");
в этом примере?
Ответы
Ответ 1
Вы можете сделать с помощью Директивы страницы.
Например:
<%@ 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 type - text/html, а набор символов по умолчанию - ISO-8859-1.
Ответ 2
Попробуйте этот кусок кода, он тоже должен работать
<%
//response.setContentType("Content-Type", "application/json"); // this will fail compilation
response.setContentType("application/json"); //fixed
%>
Ответ 3
@Petr Mensik и kensen john
Спасибо, я не мог использовать директиву страницы, потому что мне нужно установить другой тип контента в соответствии с некоторым параметром 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"