BLOGTIMES
2012/01/11

Jersey (JAX-RS) 事始め

  java  programming  restful 
このエントリーをはてなブックマークに追加

JavaによるRESTfulシステム構築

簡単な Web アプリを書かなければいけなくなったので、ちょっと RESTful な実装にしてみようかなということで Jersey をつかいはじめてみました。他にも JAX-RS の実装はいろいろあるようなのですが、参照実装のようなので基本を押さえる意味で、これにしてみました。

久しぶりに Java によるウェブアプリケーション構築をしましたが、シンプルで使いやすいライブラリですね。
以下、作業メモ。

ライブラリのダウンロード

基本的には Maven で導入するようなのですが、今回は手っ取り早く動かすために、 jar を直接 WEB-INF/lib に放り込むことにしました。j必要になる jar は Jsersey - Download を開くと少し下に A zip of Jersey というリンクがあるので、これをクリックすると jersey-archive-1.11.zip のようなアーカイブが取得できます。zip を解凍すると lib の中に入っていますのでこれを使います。

web.xml

今回は Tomcat 7 で実行したので下記のような web.xml を使いました。
このシンプルな感じが何とも言えません。

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <display-name>jaxrsexample</display-name> <servlet> <servlet-name>Jersey</servlet-name> <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>

定番の HelloWorld からスタート

とりあえず定番の HelloWorld からスタートしてみます。

jaxrsexample/Hello.java

package jaxrsexample; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") public class Hello { @GET @Produces(MediaType.TEXT_PLAIN) public String sayHello() { return "HelloWorld"; } }

クラスが作成できたら、 http://localhost:8080/jaxrsexample/hello にアクセスすると HelloWorld が表示されます。

XMLを返すようにしてみる

メソッドの返り値が String なので、これを XML にしてみます。
JAXBが使えるようなので、下記のようなItems と Item を作って XML にシリアライズしてみました。

jaxrsexample/Items.java

package jaxrsexample; import java.util.ArrayList; import java.util.List; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Items { private List<Item> items; public Items() { items = new ArrayList<Item>(); } public Items(List<Item> items) { this.items = items; } @XmlAttribute public int getCount() { return items.size(); } @XmlElement(name = "item") public List<Item> getItems() { return items; } public void setItems(List<Item> items) { this.items = items; } }

jaxrsexample/Item.java

package jaxrsexample; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Item { private String name; private String value1; private String value2; public Item() { } public Item(String name, String value1, String value2) { super(); this.name = name; this.value1 = value1; this.value2 = value2; } @XmlElement public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlElement public String getValue1() { return value1; } public void setValue1(String value1) { this.value1 = value1; } @XmlElement public String getValue2() { return value2; } public void setValue2(String value2) { this.value2 = value2; } }

jaxrsexample/Hello2.java

package jaxrsexample; import java.util.Arrays; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello2") public class Hello2 { @GET @Produces(MediaType.TEXT_XML) public Items sayHello() { return new Items( Arrays.asList( new Item("foo", "foo_aaa", "foo_bbb"), new Item("bar", "bar_aaa", "bar_bbb"), new Item("baz", "baz_aaa", "baz_bbb") ) ); } }

上記の3つのクラスを作成して、 http://localhost:8080/jaxrsexample/hello2 にアクセスすると下記の XML が帰ってくるのが確認できます。
(下記は整形していますが、実際には改行やスペースは入っていません。)

<items count="3"> <item> <name>foo</name> <value1>foo_aaa</value1> <value2>foo_bbb</value2> </item> <item> <name>bar</name> <value1>bar_aaa</value1> <value2>bar_bbb</value2> </item> <item> <name>baz</name> <value1>baz_aaa</value1> <value2>baz_bbb</value2> </item> </items>

とりあえず今日はこんなところまで。

参考

 ・ Jersey
 ・ REST: Jersey configuration on Tomcat - Surya Suravarapu
 ・ JAX-RS(Jersey)を使ってみる - azuki note
 ・ JAX-RSの基本的な機能(1/4):企業のIT・経営・ビジネスをつなぐ情報サイト EnterpriseZine (EZ)
 ・ JAXB Annotations for SOA/IoC


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/4700
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン