GAE/Jでjsonを受け取る [gae/j] [json] [jsonic]

GAE/Jでjsonを受け取る [gae/j] [json] [jsonic]

Jupitris on LaboratoryさんのJSONIC + Slim3 + GAE/JでRESTサービスを構築する方法 (※1)を参考にGoogle app engineでjsonを受け取るようにしてみた。backbone.jsを使ってフロントを作るサンプルが今後増えていきそうだったので、とりあえずクライアントとサーバのコミュニケーションを確立させておきたかった!とてーーも参考になりました。まぁ、そういうわけでほぼコピーなんですが、gae/j + jsonic (+ slim3)に焦点を絞って作ってみたので記載しておきます。

jsonicを手に入れよう

gaeで使う場合には1.2.4以上じゃないとエラーが起きるという情報がWEBに落ちてました。ここでは1.2.11を使いました。http://jsonic.sourceforge.jp/index.html#download

まずはサーブレットの定義

servletとservlet-mappingをweb.xmlに定義します。

http://gist.github.com/3255816.js?file=[gae(j)+jsonic] web.xml

jsonicのjarに含まれるservletクラスを呼び出してます。以前はWebServiceServletというクラスを呼んでましたが、現在はRESTServletかRPCServletを使おうという流れでした。

元記事ではmappings:{“/restapp/{class}.json”}でした。url-patternも*.jsonでした。

コントローラークラスを作ろう

ちなみにslim3のControllerは継承しません。まぁ継承しても動くみたいだけども。

http://gist.github.com/3255626.js?file=[gae(j)+jsonic] controller

このクラスはhttp://jsonic.sourceforge.jp/webservice.html#restservletにあるjsonic仕様に沿って作られています。jsonicのRESTServletから呼び出されます。クライアントから送られてきたjsonが自動でpopulateされて渡されます。

自動でModelに変換したくない場合は、public void create(Map param) {…}としても動きました。param.get(“name”)で任意の値を取得できます。
あとDonutはModelです。適当に自作すればOKです!

これで動きます。gaeを起動してhttp://localhost:8888/restapp/donutをブラウザから直接たたくと(GET通信なので)「find was called」というメッセージがコンソールに出力されます。以上で動くまで完成です。元記事には更に「メソッドを増やす方法」も紹介されていました。感謝です!