web-dev-qa-db-fra.com

Définissez Content-Type sur application / json dans un fichier jsp

Je suis créé un fichier jsp qui renvoie en réponse une chaîne json. Mais je vois que le type de contenu est réglé sur txt automatiquement

Mon code jsp ressemble à

<%@ 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%>

Comment puis-je effectuer quelque chose comme

setHeader("Content-Type", "application/json");

dans cet exemple?

36
Julias

Vous pouvez le faire via directive de page .

Par exemple:

<%@ page language="Java" contentType="application/json; charset=UTF-8"
    pageEncoding="UTF-8"%>
  • contentType = "mimeType [; charset = characterSet]" | "text/html; charset = ISO-8859-1"

Le type MIME et le caractère codant utilisé par le fichier JSP pour la réponse envoyée au client. Vous pouvez utiliser n'importe quel type ou jeu de caractères MIME valables pour le conteneur JSP. Le type MIME par défaut est text/html et le jeu de caractères par défaut est ISO-8859-1.

67
Pau Kiat Wee

Essayez ce morceau de code, ça devrait marcher aussi

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

@Petr Mensik & kensen john

Merci, je n'ai pas pu utiliser la directive page car je dois définir un type de contenu différent en fonction d'un paramètre d'URL. Je vais coller mon code ici car c'est quelque chose d'assez courant avec 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 %>

Lorsque le rappel est fourni, retourne:

    callback({...JSON stuff...});

avec le type de contenu "text/javascript"

Si le rappel n'est PAS fourni, retourne:

    {...JSON stuff...}

avec le type de contenu "application/json"

3
Gael