web-dev-qa-db-fra.com

Struts2 Comment renvoyer une réponse JSON

Je suis en train de créer une application Web où les utilisateurs peuvent récupérer les tags de la base de données au format JSON,

voici l'action de mes jambes de force

public String execute(){


    Gson gson = new Gson();
    String tagsAsJson = gson.toJson(audioTaggingService.findTagsByName(q));
    System.out.println(tagsAsJson);

    return "success";
}

METTRE À JOUR:

La tagsAsJson est déjà au format JSON, tout ce que je veux, c'est ne renvoyer que cela, et non le recours collectif dans son ensemble.

Il retourne quelque chose comme ça

Ce sont les données que je veux renvoyer à l'utilisateur

[{"id":2,"name":"Dubstep","description":"Dub wob wob"},{"id":3,"name":"BoysIIMen","description":"A 1990s Boy Band"},{"id":4,"name":"Sylenth1","description":"A VST Plugin for FLStudio "}]

Comment puis-je retourner la tagsAsJson en tant que r JSON esponse? puisque cette réponse JSON sera utilisée par le code côté client.

12
user962206

Utilisez le Struts "JSON Plugin" .

Assez facile, trois étapes:

Il suffit de l'inclure dans votre projet Maven comme ceci

<dependency>
    <groupId>org.Apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>${version.struts2}</version>
</dependency>

Déclarez le champ que vous souhaitez renvoyer sous forme de chaîne JSON comme le champ de votre action, indiquez le getter et le setter.

public class Struts2Action extends ActionSupport {

    private String jsonString;

    public String execute() {
        Gson gson = new Gson();
        jsonString = gson.toJson(audioTaggingService.findTagsByName(q));

        return "success";
    }

    public String getJsonString() {
        return jsonString;
    }

    public void setJsonString(String jsonString) {
        this.jsonString = jsonString;
    }
}

Et enfin, mettez ceci dans votre XML:

<action name="someJsonAction" class="com.something.Struts2Action">
    <result type="json">
        <param name="noCache">true</param>
        <param name="excludeNullProperties">true</param>
        <param name="root">jsonString</param>
    </result>
</action>

Faites attention à <param name="root">jsonString</param>. Ce fragment xml indique à Struts2 que cette propriété exacte doit être considérée comme une racine pour la sérialisation JSON. Ainsi, seule la propriété nommée (et au-dessous, si c'est une carte ou quoi que ce soit) sera renvoyée dans une réponse JSON.

Grâce au plugin JSON, le type de contenu sera correct.

La documentation "Plugin JSON" est ici: http://struts.Apache.org/release/2.3.x/docs/json-plugin.html

20
Platon

Essayez d'utiliser PrintWriter de la réponse.

Java

    public String execute()
    {
      Gson gson                    = new Gson();
      String jsonString            = gson.toJson(audioTaggingService.findTagsByName(q));
      HttpServletResponse response = ServletActionContext.getResponse();

      response.setContentType("application/json");
      response.getWriter().write(jsonString );

      return null;
   }
11
Tomas Santos

Dans la classe Action, mettez ci-dessous le code.

  public class Struts2Action extends ActionSupport
  {     

    public String jsonString="";

    public String execute()
    {
      Gson gson = new Gson();
      jsonString  = gson.toJson(audioTaggingService.findTagsByName(q));
      System.out.println(jsonString);

      return "success";
   }
  }

Dans JSP mis en dessous du code 

<%@ taglib prefix="s" uri="/struts-tags" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<title>Struts Rais</title>

<s:property value="jsonString"/><br />

Cela imprimera les données JSON si vous souhaitez manipuler des données JSON, cochez les données dans la balise var <s:set> et accédez à la variable dans la page entière.

2
user2023812

Pour renvoyer une réponse JSON, vous devez inclure le fichier struts2-json-plugin-2.xxjar dans le chemin de génération de votre projet. Vous devez définir le package extend = "json-default"json.

_ {le fichier struts2-json-plugin-2.x.x.jar vous permet de sérialiser l'attribut de la classe Action qui contient des paramètres dans un objet JSON.

Obtenez les dépendances de jar de maven

  <dependencies>
<dependency>
    <groupId>org.Apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.1.8</version>
</dependency>
<dependency>
    <groupId>org.Apache.struts</groupId>
    <artifactId>struts2-json-plugin</artifactId>
    <version>2.1.8</version>
</dependency>

Vous pouvez obtenir l'aide complète de ce lien ...

Réponse Struts 2 et JSON

0
Marvin Pork