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

Struts2でJSONで返したい(RESTっぽくしたい)その3 テキストでJSONを書く

$
0
0
いや、ニーズはないと思いますよ、思いますけど、一応・・・

昨日、

Struts2でJSONで返したい(RESTっぽくしたい)その2 struts.xmlを使う
http://blog.goo.ne.jp/xmldtp/e/b2ce6e54c1ca160ad1727dd876705e1b

を書いたけど、JSONライブラリを使わないで、
・response.getWriter()で、PrintWriterをとってきて、
・printで、JSONの内容をテキストで書き出す
こともできる。

これではニーズないと思うけど、テキストファイルをダウンロードしたい
場合も理屈は同じなので、そういうニーズはあるかもしれないということで、
その方法も書いておく。



■お題

昨日と同じ。つまり、

を、今回は、テキストとして出す。



■変更点
 昨日との違いは、
・struts2-json-pluginは、いりません
・struts.xmlの書き方
・Actionの書き方
なので、今回は、struts.xmlとActionの内容を載せておきます。
(あとのweb.xmlの配置などは、ふつうのStruts2と同じなので省略)



■struts.xml

Struts2をやってみる (3) - のtypeに関して
http://kinjouj.github.io/2013/09/struts2-3-result-type.html

の「plainText」を参考にしました。結局、こうなる。

<?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="struts-default"> <action name="hello" class="struts2.gui.HelloAction"> <result name="success" type="plainText"> <param name="charSet">utf-8</param> </result> </action> </package> </struts>
上記の例は、「struts2.gui.HelloAction」というクラスにexecute()があって
execute()で、getWriter()して、テキスト書き出しするというもの
(リターンがsuccessのときに)



■Actionの書き方

基本的には上記サイト「Struts2をやってみる (3) - のtypeに関して」の
「plainText」のstruts.xmlの下にあるソースを参考にしました。結局、こうなる。


package struts2.gui;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.interceptor.ServletResponseAware;
import com.opensymphony.xwork2.ActionSupport;

//==============================================//
//JSONのサンプル
//==============================================//
public class HelloAction extends ActionSupport implements ServletResponseAware{

private HttpServletResponse response;


public void setServletResponse(HttpServletResponse response) {
this.response = response;
}


public String execute()
{

response.setContentType("text/plain; charset=utf-8");

try {
PrintWriter out = response.getWriter();
out.print("{\"japanese\":\"ようこそ世界\",\"english\":\"Hello World\"}");
out.close();
} catch (IOException e) {
e.printStackTrace();
}

return SUCCESS;
}

}


closeしないと、出力されないこともあるので注意


こんなかんじかな・・・

Viewing all articles
Browse latest Browse all 7393

Trending Articles