[Spring Roo] 13. JSONでの応答機能の追加

2014/02/28 8:04 PM
 

一覧表示を、もっとリッチなものにしたい。Spring Rooは、Dojo toolkitというJavaScriptライブラリを標準で用意しており、この中に、高機能そうなグリッドがあるので、それを使ってみたい。また、データの受信は非同期に行いたい。非同期通信と言えばJSONを使うのがポピュラーだ。

今回は、下地として、サーバ側でJSONで応答させる機能を追加してみよう。

エンティティでの対応

JSONで応答させるために、以下のコマンドを使ってアスペクトコードを作らせる。

すると、OnlineMemoクラスに@RooJsonアノテーションが追加され、ITDコードとして、OnlineMemo_Roo_Json.ajが作られる。

これによって、エンティティとJSONの相互変換が可能になる。

コントローラでの対応

Roo Shellで、次のコマンドを実行する。

すると、OnlineMemoControllerに@RooWebJsonアノテーションが追加され、OnlineMemoController_Roo_Controller_Json.ajが作られる。

コントローラに追加されたメソッドは、HTTPヘッダに”Accept=application/json”が設定されている時に、元々から用意されているCRUDの各メソッドの代わりに動作する。

なので、コンソールなどから、

と打てば、オンラインメモの一覧がJSONで帰ってくるはずだ。しかし、認証機能を追加したこのプロジェクトでは、敢えなくエラーになってしまうので、applicationContext-security.xmlのintercept-urlに以下を追加してテストしておこう。

応答は、以下のようになる。

JSON出力からパスワードハッシュを除外する

これでめでたし、と言いたいところだが、大きな問題がある。

関連するAccountのパスワードハッシュがだだ漏れだ。

そこで、JSONに出力する内容からパスワードハッシュを除外する。

Flexjsonのサイトによると、シリアライズするメソッド内でのexcludeで指定できるとのことだが、パスワードハッシュはシステム内から永遠に出てほしくない情報だ。よって、エンティティのアノテーションで対応する。

方法は簡単で、Accountエンティティクラスに、passwordHashのgetterを作り、@JSON(include = false)とすればよい。

保存すると、自動的にAccount_Roo_JavaBean.ajからgetPasswordHashメソッドが削除される。

この状態で、再度、curlを叩いてみると、以下のように表示されるはずだ。

次回は、Dojoを使用した高機能なDataGridで、このJSONを使用してみる。 とりあえず、セキュリティの設定を戻しておこう。



コメントはまだありません

まだコメントはありません。

RSS feed for comments on this post. TrackBack URI

コメントを書く

WordPress Themes