Quantcast
Channel: ウィリアムのいたずらの、まちあるき、たべあるき
Viewing all articles
Browse latest Browse all 7393

Struts2でJSONで返したい(RESTっぽくしたい)その2 struts.xmlを使う

$
0
0
前に

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でリターンしていること



こんなところかな・・・

Viewing all articles
Browse latest Browse all 7393

Trending Articles