Définir le Type de Contenu application/json dans le fichier jsp

je suis créé un fichier jsp qui retourne comme une réponse une chaîne json. Mais je vois que le type de contenu est défini à 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?

33
demandé sur Hardik Mishra 2012-05-15 11:07:57

3 réponses

Vous pouvez le faire via la directive.

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 encodant le fichier JSP utilise pour la réponse qu'il envoie au client. Vous pouvez utiliser N'importe quel type MIME ou jeu de caractères valide pour le conteneur JSP. Le MIME par défaut type text/html, et le jeu de caractères par défaut est ISO-8859-1.

64
répondu Pau Kiat Wee 2012-05-15 07:17:54

Essayez ce morceau de code, il devrait travailler trop

<%
    //response.setContentType("Content-Type", "application/json"); // this will fail compilation
    response.setContentType("application/json"); //fixed
%>
11
répondu Petr Mensik 2012-12-28 17:53:08

@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 URL. Je vais coller mon code ici, puisque c'est quelque chose de commun 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 %>

Quand le rappel est fourni, retourne:

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

avec le contenu de type "text/javascript"

Quand le rappel n'est PAS fourni, retourne:

    {...JSON stuff...}

avec contenu-type "application / json"

2
répondu Gael 2013-10-23 03:15:51