GoogleAppEngine/JSONICでRESTしてみる
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
// 下階層用テンプレート
#topicpath
----//ここにコンテンツを記述します。
Google App EngineにRESTなサービスを追加したいと思います。
#contents
** RESTなサービスを作成するJSONICの RESTServlet [#i3a3464c]
RESTなリクエストをパラメータとして解析するサーブレットと...
net.arnx.jsonic.web.RESTServlet
を使用してみました。これはweb.xmlの設定で
"mappings": {
"/{class}/{source}.json":"nu.mine.kino.gae.controlle...
}
とか書くことで、
/hoge/fuga.json
へのリクエストを、
nu.mine.kino.gae.controller.AjaxHogeController#find(Map ...
へ転送することができたり、戻り値のオブジェクトを自動でJSO...
*** やってみる [#r451a346]
実際簡単なプログラムでやってみます。RESTのURIとして
/text2unicode/t/[文字(をURL Encodeしたもの)].json
を呼び出すと、
{
"text":"文字",
"unicode":"文字をUnicode表記したもの"
}
を返すようなものを考えます。
たとえば、
/text2unicode/t/%E3%81%82.json <-「あ」をURL Encodeし...
にアクセスすると、
{"text":"あ","unicode":"\\u3042"}
が返却されるようにします。
***JSONICのインストールと設定 [#qdabfd9c]
JSONICのインストールは簡単で、[[JSONIC - simple json enco...
<servlet>
<servlet-name>restServlet</servlet-name>
<servlet-class>net.arnx.jsonic.web.RESTServlet</serv...
<init-param>
<param-name>config</param-name>
<param-value>
{
"debug": true,
"mappings": {
"/{class}/{uort}/{source}.json":"nu.mi...
}
}
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>restServlet</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
マッピングを
"/{class}/{uort}/{source}.json":"nu.mine.kino.gae.rest.A...
このようにしたので
/text2unicode/t/%E3%81%82.json
にアクセスすると、
nu.mine.kino.gae.rest.AjaxText2unicodeController#find(Ma...
が呼び出され、パラメタに
{source=%E3%81%82, class=text2unicode, uort=t}
というMapが渡されてきます。
***戻りのオブジェクト [#a359392c]
戻りのオブジェクトは下記のようなPOJOを定義します。ちなみ...
public class UnicodeTextObject {
private String text;
private String unicode;
...Getter/Setter省略
}
***nu.mine.kino.gae.rest.AjaxText2unicodeControllerの実装...
nu.mine.kino.gae.rest.AjaxText2unicodeControllerを実装し...
public class AjaxText2unicodeController {
public UnicodeTextObject find(Map<String, String> pa...
throws UnsupportedEncodingException {
String source = URLDecoder.decode(params.get("so...
String uort = params.get("uort");
System.out.println(params);
UnicodeTextObject create =
new TextUtilsService().create(source, uort.c...
return create;
}
}
public class TextUtilsService {
public String unicode2Text(String unicode) {
return StringEscapeUtils.unescapeJava(unicode);
}
public String text2Unicode(String text) {
return StringEscapeUtils.escapeJava(text);
}
public UnicodeTextObject create(String source, char ...
UnicodeTextObject ret = new UnicodeTextObject();
switch (c) {
case 'u': //urlがuなら unicode -> text
String unicode2Text = unicode2Text(source);
ret.setText(unicode2Text);
ret.setUnicode(source);
break;
case 't': //urlがtなら text -> unicode
String text2Unicode = text2Unicode(source);
ret.setUnicode(text2Unicode);
ret.setText(source);
break;
default:
ret.setText(source);
ret.setUnicode(source);
break;
}
return ret;
}
}
いろいろ書いてますが、
public UnicodeTextObject find(Map<String, String> params);
このメソッド内で
String source = URLDecoder.decode(params.get("source"), ...
このように引数のMapからパラメタを取得し、
UnicodeTextObject create =
new TextUtilsService().create(source, uort.charAt(0));
return create;
としてPOJOを作成して返しているだけですね。
ちなみにこのメソッド
public UnicodeTextObject find(Map<String, String> params)
このシグネチャは、[[WebサービスAPI (JSONIC 1.3)>http://js...
あ書き忘れましたが、Unicode表記の文字列を取得するのに
StringEscapeUtils.escapeJava(text);
とCommons Langを使ってるのでそのjarもWEB-INF/libに入れと...
**呼び出してみる [#n7d8a219]
試しにGoogle App Engineを起動して
http://localhost:8888/text2unicode/t/%E7%B0%A1%E5%8D%98%...
へブラウザとかREST ClientとかでGetでアクセスしてみましょ...
{"text":"簡単にRESTできた","unicode":"\\u7C21\\u5358\\u3...
が返却されました!
**関連リンク [#x99d4764]
-[[WebサービスAPI (JSONIC 1.3)>http://jsonic.sourceforge....
----
この記事は
#vote(おもしろかった[3],そうでもない[0])
- 書いてみたもののGoogle App Engineあんま関係なく、普通に...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
終了行:
// 下階層用テンプレート
#topicpath
----//ここにコンテンツを記述します。
Google App EngineにRESTなサービスを追加したいと思います。
#contents
** RESTなサービスを作成するJSONICの RESTServlet [#i3a3464c]
RESTなリクエストをパラメータとして解析するサーブレットと...
net.arnx.jsonic.web.RESTServlet
を使用してみました。これはweb.xmlの設定で
"mappings": {
"/{class}/{source}.json":"nu.mine.kino.gae.controlle...
}
とか書くことで、
/hoge/fuga.json
へのリクエストを、
nu.mine.kino.gae.controller.AjaxHogeController#find(Map ...
へ転送することができたり、戻り値のオブジェクトを自動でJSO...
*** やってみる [#r451a346]
実際簡単なプログラムでやってみます。RESTのURIとして
/text2unicode/t/[文字(をURL Encodeしたもの)].json
を呼び出すと、
{
"text":"文字",
"unicode":"文字をUnicode表記したもの"
}
を返すようなものを考えます。
たとえば、
/text2unicode/t/%E3%81%82.json <-「あ」をURL Encodeし...
にアクセスすると、
{"text":"あ","unicode":"\\u3042"}
が返却されるようにします。
***JSONICのインストールと設定 [#qdabfd9c]
JSONICのインストールは簡単で、[[JSONIC - simple json enco...
<servlet>
<servlet-name>restServlet</servlet-name>
<servlet-class>net.arnx.jsonic.web.RESTServlet</serv...
<init-param>
<param-name>config</param-name>
<param-value>
{
"debug": true,
"mappings": {
"/{class}/{uort}/{source}.json":"nu.mi...
}
}
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>restServlet</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
マッピングを
"/{class}/{uort}/{source}.json":"nu.mine.kino.gae.rest.A...
このようにしたので
/text2unicode/t/%E3%81%82.json
にアクセスすると、
nu.mine.kino.gae.rest.AjaxText2unicodeController#find(Ma...
が呼び出され、パラメタに
{source=%E3%81%82, class=text2unicode, uort=t}
というMapが渡されてきます。
***戻りのオブジェクト [#a359392c]
戻りのオブジェクトは下記のようなPOJOを定義します。ちなみ...
public class UnicodeTextObject {
private String text;
private String unicode;
...Getter/Setter省略
}
***nu.mine.kino.gae.rest.AjaxText2unicodeControllerの実装...
nu.mine.kino.gae.rest.AjaxText2unicodeControllerを実装し...
public class AjaxText2unicodeController {
public UnicodeTextObject find(Map<String, String> pa...
throws UnsupportedEncodingException {
String source = URLDecoder.decode(params.get("so...
String uort = params.get("uort");
System.out.println(params);
UnicodeTextObject create =
new TextUtilsService().create(source, uort.c...
return create;
}
}
public class TextUtilsService {
public String unicode2Text(String unicode) {
return StringEscapeUtils.unescapeJava(unicode);
}
public String text2Unicode(String text) {
return StringEscapeUtils.escapeJava(text);
}
public UnicodeTextObject create(String source, char ...
UnicodeTextObject ret = new UnicodeTextObject();
switch (c) {
case 'u': //urlがuなら unicode -> text
String unicode2Text = unicode2Text(source);
ret.setText(unicode2Text);
ret.setUnicode(source);
break;
case 't': //urlがtなら text -> unicode
String text2Unicode = text2Unicode(source);
ret.setUnicode(text2Unicode);
ret.setText(source);
break;
default:
ret.setText(source);
ret.setUnicode(source);
break;
}
return ret;
}
}
いろいろ書いてますが、
public UnicodeTextObject find(Map<String, String> params);
このメソッド内で
String source = URLDecoder.decode(params.get("source"), ...
このように引数のMapからパラメタを取得し、
UnicodeTextObject create =
new TextUtilsService().create(source, uort.charAt(0));
return create;
としてPOJOを作成して返しているだけですね。
ちなみにこのメソッド
public UnicodeTextObject find(Map<String, String> params)
このシグネチャは、[[WebサービスAPI (JSONIC 1.3)>http://js...
あ書き忘れましたが、Unicode表記の文字列を取得するのに
StringEscapeUtils.escapeJava(text);
とCommons Langを使ってるのでそのjarもWEB-INF/libに入れと...
**呼び出してみる [#n7d8a219]
試しにGoogle App Engineを起動して
http://localhost:8888/text2unicode/t/%E7%B0%A1%E5%8D%98%...
へブラウザとかREST ClientとかでGetでアクセスしてみましょ...
{"text":"簡単にRESTできた","unicode":"\\u7C21\\u5358\\u3...
が返却されました!
**関連リンク [#x99d4764]
-[[WebサービスAPI (JSONIC 1.3)>http://jsonic.sourceforge....
----
この記事は
#vote(おもしろかった[3],そうでもない[0])
- 書いてみたもののGoogle App Engineあんま関係なく、普通に...
#comment
#topicpath
SIZE(10){現在のアクセス:&counter;}
ページ名: