Подтвердить что ты не робот

Задайте 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");

в этом примере?

4b9b3361

Ответ 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"