JSONICのREST Servletを使って,JavaオブジェクトをJSONにしてレスポンスを返す。


スポンサーリンク

以下のようなURLにリクエストを投げて、

http://localhost:8080/json-web/sample/person.json

こんな値を返してみたい。

{"age":"28","name":"takeshi"}

Jsonicを使えば、簡単にJsonによるWeb APIを実現することができます。

準備

Eclipseで、

新規 > その他 > Maven プロジェクト

で、「maven-archetype-webapp」を選択する。

グループIDを「json.web」とし、
アーティファクトIDを「json-web」とする。

そうすると、json-webというWebアプリケーション開発用のプロジェクトのひな形ができる。

f:id:sho322:20141119014309j:plain

ここのpom.xmlにまず、JSONICの依存情報を定義しよう。

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>json.web</groupId>
  <artifactId>json-web</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>json-web Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
   	<dependency>
	    <groupId>net.arnx</groupId>
	    <artifactId>jsonic</artifactId>
	    <version>1.3.3</version>
	</dependency>
  </dependencies>
  <build>
    <finalName>json-web</finalName>
  </build>
</project>

json-webのプロジェクトで新規 > ソース・フォルダー
「java」を作ります。
ここにソースを書いていきます。

一旦ここで、Mavenでbuildしておきます。

pom.xmlを右クリックして、

実行 > Maven install

を実行します。
これで、Maven依存関係にjsonicが追加されたはずです。

では、Jsonを返すためのサービスを作ってみましょう。

package com.code.log.web;


public class SampleService {

	public Person getPerson() {
		Person takeshi = new Person();
		takeshi.setName("takeshi");
		takeshi.setAge("28");
		return takeshi;
	}
}

まじで、これだけ。

web.xmlにJsonicのREST Servletを指定すると、呼ばれたメソッドのreturnで返したものが、Json形式になってレスポンスとして返ります。

じゃあ、web.xmlはどうなの?

こんな感じ。

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
	    <servlet-name>restServlet</servlet-name>
	    <servlet-class>net.arnx.jsonic.web.RESTServlet</servlet-class>
	    <init-param>
	        <param-name>config</param-name>
	        <param-value>
	        {
	        	"debug": true,
	        	<!-- サンプル用 -->
	        	"mappings": {
	        		"/sample/person.json": {
	        			"target":"com.code.log.web.SampleService",
	        			"method": {"GET": "getPerson"},
	        			"verb": [ "GET" ]
	        		}
	        	}
	        }
	        </param-value>
	    </init-param>
	</servlet>

	<servlet-mapping>
	    <servlet-name>restServlet</servlet-name>
	    <url-pattern>*.json</url-pattern>
	</servlet-mapping>
</web-app>

ここまで書いたら、maven installを実行して、target以下にできたwarファイルをサーブレットコンテナにデプロイしてみましょう。

f:id:sho322:20141119014329j:plain

こんな感じで、オブジェクトがJson形式になって返ってきました。

ディレクトリ構成は最終的にはこんな風に、シンプルになります。
f:id:sho322:20141119015431j:plain