私は現在、ユーザーがデータベースからタグを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応答はクライアント側のコードで使用されるためです。
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
応答の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;
}
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>
タグを付けて、ページ全体の変数にアクセスします。
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>
このリンクから完全なヘルプを得ることができます...