前に
Struts2でJSONで返したい(RESTっぽくしたい)
http://blog.goo.ne.jp/xmldtp/e/e1bf4ddc8fdace75f0ee1c7226ef4f88
を書いたけど、そのときは、ゼロ・コンフィグレーション(struts.xml)
だった。struts.xmlを記述する方法は、
Struts2でレスポンスをjsonにする方法
http://sugiim.hatenablog.com/entry/2013/02/21/190000
にあるけど、
・具体的に、struts.xmlをどう書くか?
・Action側はどう書くか
について書いていないので、今回は、そのお話を少し・・・
■お題
hello.actionを呼び出したら、
ハッシュマップ(というか連想配列で)
englishはHello world
japaneseはこんにちは世界
とJSON形式で返る、つまり
![]()
っていうのを作成する
■変更点
ふつうのStruts2と違うのは、
・struts2-json-pluginを入れる
・struts.xmlの書き方
・Actionの書き方
なので、この点についてだけ、ソースを出して記述します
(あとのweb.xmlの配置などは、ふつうのStruts2と同じなので省略)
■struts2-json-pluginを入れる
上記の「Struts2でレスポンスをjsonにする方法」で、「プラグイン追加」
のところ。そこでは、mavenを使っているからpom.xmlを修正しているけど、
ここでは、手作業でやってみる。
mavenはmavenリポジトリ(http://mvnrepository.com/)からとってくる。
今回は、mavenリポジトリのstruts2-json-plugin
http://mvnrepository.com/artifact/org.apache.struts/struts2-convention-plugin
の中から、下にスクロールすると、適当に新しいのがあるので、
好き勝手に選んで、バージョン番号(例えば2.3.24.1)をクリック
変わった画面で、
![]()
downloadをクリック
ダウンロードしたjarを、WEB-INF/libの下にコピーします(他のjarと要領は一緒)
■struts.xml
結局、こうなります。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="hello" namespace="/" extends="json-default"> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult"/> </result-types> <action name="hello" class="struts2.gui.HelloAction"> <result name="success" type="json"> <param name="root">msg</param> </result> </action> </package> </struts>
上記の例は、「struts2.gui.HelloAction」というクラスにexecute()があって、
そのクラスのアトリビュートにmsgがあり、そのmsgをJSON形式で送る場合の指定
(リターンがsuccessのときに)
■Actionの書き方
上記例で指定した、struts2.gui.HelloActionは、こんなかんじ。
import java.util.HashMap;
import com.opensymphony.xwork2.ActionSupport;
//==============================================//
//JSONのサンプル//
//==============================================//
public class HelloAction extends ActionSupport{
private HashMap<String,String> msg;
public HashMap<String,String> getMsg() {
return msg;
}
public void setMsg(HashMap<String,String> msg) {
this.msg = msg;
}
public String execute()
{
HashMap<String,String> map = new HashMap<String,String>();
map.put("english","Hello World");
map.put("japanese","ようこそ世界");
setMsg(map);
return SUCCESS;
}
}
JSONで返す値(struts.xmlのresultタグ内のparamタグで指定)を
宣言し、アクセサ(setter,getter)をつけることと、
値をセットしたら、successでリターンしていること
こんなところかな・・・
Struts2でJSONで返したい(RESTっぽくしたい)
http://blog.goo.ne.jp/xmldtp/e/e1bf4ddc8fdace75f0ee1c7226ef4f88
を書いたけど、そのときは、ゼロ・コンフィグレーション(struts.xml)
だった。struts.xmlを記述する方法は、
Struts2でレスポンスをjsonにする方法
http://sugiim.hatenablog.com/entry/2013/02/21/190000
にあるけど、
・具体的に、struts.xmlをどう書くか?
・Action側はどう書くか
について書いていないので、今回は、そのお話を少し・・・
■お題
hello.actionを呼び出したら、
ハッシュマップ(というか連想配列で)
englishはHello world
japaneseはこんにちは世界
とJSON形式で返る、つまり

っていうのを作成する
■変更点
ふつうのStruts2と違うのは、
・struts2-json-pluginを入れる
・struts.xmlの書き方
・Actionの書き方
なので、この点についてだけ、ソースを出して記述します
(あとのweb.xmlの配置などは、ふつうのStruts2と同じなので省略)
■struts2-json-pluginを入れる
上記の「Struts2でレスポンスをjsonにする方法」で、「プラグイン追加」
のところ。そこでは、mavenを使っているからpom.xmlを修正しているけど、
ここでは、手作業でやってみる。
mavenはmavenリポジトリ(http://mvnrepository.com/)からとってくる。
今回は、mavenリポジトリのstruts2-json-plugin
http://mvnrepository.com/artifact/org.apache.struts/struts2-convention-plugin
の中から、下にスクロールすると、適当に新しいのがあるので、
好き勝手に選んで、バージョン番号(例えば2.3.24.1)をクリック
変わった画面で、

downloadをクリック
ダウンロードしたjarを、WEB-INF/libの下にコピーします(他のjarと要領は一緒)
■struts.xml
結局、こうなります。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <package name="hello" namespace="/" extends="json-default"> <result-types> <result-type name="json" class="org.apache.struts2.json.JSONResult"/> </result-types> <action name="hello" class="struts2.gui.HelloAction"> <result name="success" type="json"> <param name="root">msg</param> </result> </action> </package> </struts>
上記の例は、「struts2.gui.HelloAction」というクラスにexecute()があって、
そのクラスのアトリビュートにmsgがあり、そのmsgをJSON形式で送る場合の指定
(リターンがsuccessのときに)
■Actionの書き方
上記例で指定した、struts2.gui.HelloActionは、こんなかんじ。
import java.util.HashMap;
import com.opensymphony.xwork2.ActionSupport;
//==============================================//
//JSONのサンプル//
//==============================================//
public class HelloAction extends ActionSupport{
private HashMap<String,String> msg;
public HashMap<String,String> getMsg() {
return msg;
}
public void setMsg(HashMap<String,String> msg) {
this.msg = msg;
}
public String execute()
{
HashMap<String,String> map = new HashMap<String,String>();
map.put("english","Hello World");
map.put("japanese","ようこそ世界");
setMsg(map);
return SUCCESS;
}
}
JSONで返す値(struts.xmlのresultタグ内のparamタグで指定)を
宣言し、アクセサ(setter,getter)をつけることと、
値をセットしたら、successでリターンしていること
こんなところかな・・・