web-dev-qa-db-ja.com

Struts2 JSON応答を返す方法

私は現在、ユーザーがデータベースからタグをJSONとしてフェッチできるWebアプリケーションを作成しています。

ここに私の支柱のアクションがあります

public String execute(){


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

    return "success";
}

更新:

tagsAsJsonはすでにJSON形式になっているので、クラスアクション全体ではなく、それだけを返すだけです。

このようなものを返します

これはユーザーに返したいデータです

[{"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 "}]

tagsAsJsonをr JSON応答として返すにはどうすればよいですか? JSON応答はクライアント側のコードで使用されるためです。

14
user962206

Struts "JSON Plugin" を使用します。

非常に簡単な3つのステップ:

このようにあなたのmavenプロジェクトにそれを含めるだけです

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

アクションのフィールドと同様に、JSON文字列として返すフィールドを宣言し、ゲッターとセッターを提供します。

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;
    }
}

そして最後に、これを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>

注意を払う <param name="root">jsonString</param>。このxmlは、この正確なプロパティをJSONシリアル化のルートと見なす必要があることをStruts2に通知します。そのため、JSONレスポンスでは、名前付きプロパティ(マップの場合はそれ以下)のみが返されます。

JSONプラグインのおかげで、コンテンツタイプは正しくなります。

「JSONプラグイン」ドキュメントはこちら: http://struts.Apache.org/release/2.3.x/docs/json-plugin.html

20
Platon

応答のPrintWriterを使用してみてください。

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;
   }
13
Tomas Santos

Actionクラスでコードの下に置きます。

  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";
   }
  }

JSPでは、コードの下に置きます

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

これは、JSONデータを操作する場合、JSONデータを出力します。var<s:set>タグを付けて、ページ全体の変数にアクセスします。

2
user2023812

JSON応答を返すには、プロジェクトのビルドパスにstruts2-json-plugin-2.xxjarファイルを含める必要があります。パッケージを設定する必要がありますextends = "json-default"結果タイプはjsonです。

struts2-json-plugin-2.x.x.jarファイルを使用すると、セッターを持つアクションクラス属性をJSONオブジェクトにシリアル化できます。

Mavenからjarの依存関係を取得する

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

このリンクから完全なヘルプを得ることができます...

Struts 2とJSON応答

1
Marvin Pork