2012年12月7日金曜日

MappingJacksonJsonViewを使ってみる [Spring Framework Advent Calendar 2012 7日目 #jsug ]

Spring Framework Advent Calendar 2012の7日目です。
2巡目!

これまた先日ブログで書いた二番煎じですが、Spring MVCでJSONを返すViewの例です。
ソースはここにあります。

サーブレットの設定

とりあえず、ソースです。
<beans:bean xmlns="http://www.springframework.org/schema/beans" 
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
  <property name="mediaTypes">
    <map>
      <entry key="json" value="application/json" />
    </map>
  </property>
  <property name="defaultViews">
    <list>
      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView">
        <property name="prefixJson" value="true"/>
      </bean>
    </list>
  </property>
</beans:bean>

ContentNegotiatingViewResolver は、リクエストのAccept headerやファイル名をもとにViewを解決します。
map で指定しているのは、 key がファイルの拡張子、 value がコンテンツタイプです。
defaultViews は、ViewResolverのチェーンでViewが解決できない場合に使われるViewを指定します。
今回は、ここで MappingJacksonJsonView を指定することでViewとして使用するようにしています。


コントローラー

こちらは非常にやっつけなコードになっていますw
@RequestMapping(value = "/person/{id}", method = RequestMethod.GET)
public @ResponseBody Person getPerson(@PathVariable int id, Model model) {
  Person person = new Person();
  person.setId(id);
  person.setName("Tom");
  return person;
}

@ResponseBody をつけてPOJOを返すことでレスポンスはJSONになります。
以下のサイトで詳しく説明されています。 #私が今書いている意味って(ry



上のコードでは、以下のようなJSONが出力されます。
{"name":"Tom","id":1}

最後に

今回は MappingJacksonJsonView でしたが、他にもSpringで使えるViewはあるので、それらをうまく使うといろいろなことを簡単に行えそうですね。

8日目は @mike_neck さん、よろしくお願いします!

0 件のコメント:

コメントを投稿

RedmineプラグインをGitHub Actionsでテストする

Redmine Advent Calendar 2019 の Qiita で書きました。追っかけで もう一つ 。 Travis-CIで行っていたRedmineプラグインのCIを、GitHub Actionsに変更したものです。 GitHub Actionsをやってみようという...