JAX-RSの環境構築 †JAX-RSのリファレンス実装である jersey を利用してRESTfulなWebサービスを作成する手順を記載する。 JAX-RSとは †JAX-RSはRESTfulなWebアプリケーションを作成するための仕様で、普通のJavaクラスにアノテーションを付けるだけでWebサービスとして公開できる。 環境構築(Gradle編) †jetty プラグインを利用する為、Tomcat 等のサーバのインストール等は不要。 適当なフォルダを作成する †mkdir mywebapp build.gradle の作成 †作成したフォルダ配下に build.gradle を作成する。 apply plugin : 'java' apply plugin : 'war' apply plugin : 'jetty' sourceCompatibility = 1.7 repositories { mavenCentral() } jettyRun { reload = "automatic" scanIntervalSeconds = 1 } dependencies { providedCompile "javax.ws.rs:javax.ws.rs-api:2.0" compile "org.glassfish.jersey.core:jersey-server:latest.release" compile "org.glassfish.jersey.containers:jersey-container-servlet:latest.release" compile "org.glassfish.jersey.media:jersey-media-json-jackson:latest.release" } Gradle規約に合うようにフォルダ作成 †以下の通り作成する + src + main + java + resources + webapp + WEB-INF web.xml の作成 †WEB-INF 配下に 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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>MyWebService</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>myservlet</servlet-name> <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> <init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>example</param-value> </init-param> <init-param> <param-name>jersey.config.server.provider.scanning.recursive</param-name> <param-value>true</param-value> </init-param> <load-on-startup>10</load-on-startup> </servlet> <servlet-mapping> <servlet-name>myservlet</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping> </web-app> サービスの作成 †src/main/java 配下に example フォルダを作成し、その配下に以下のクラスを作成する package example; import java.util.*; import javax.ws.rs.*; import javax.ws.rs.core.MediaType; @Path("books") public class BookResource { /** * 一覧取得<br /> * @return 結果(JSON文字列) */ @GET @Produces(MediaType.APPLICATION_JSON) public List<Map<String,Object>> list() { // Mapを返却する例(自動でJSONに変換される) List<Map<String,Object>> list = new ArrayList<Map<String,Object>>(); for (int i = 0; i < 10; i++) { Map<String,Object> rec = new HashMap<String,Object>(); rec.put("isbn" , "TEST" + i); rec.put("title", "BOOK" + i); rec.put("price", 1000 + i); list.add(rec); } return list; } /** * id指定検索 * @param id 対象データのid * @return 結果(JSON文字列) */ @GET @Path("{id}") @Produces(MediaType.APPLICATION_JSON) public Map<String,Object> show(@PathParam("id") Integer id) { Map<String,Object> rec = new HashMap<String,Object>(); rec.put("isbn" , "TEST1"); rec.put("title", "BOOK1"); rec.put("price", 1001); return rec; } } サーバの起動 †最初に作成したフォルダ(mywebapp)に戻り、以下の通り jetty を起動する。 gradle jettyRun 環境構築(eclipse + Tomcat) †Java、Tomcat のインストール †※共に7以降をインストール Webプロジェクトの作成 †プロジェクト名、コンテキストルート とも "mywebapp" として作成 必要なライブラリのダウンロード †
※ うまく動かない時は、ライブラリのバージョン等に問題がある可能性があるので Gradleでjarの取得だけを行う を参照してライブラリ取得を行ってみる。 上記の 各 jarファイルを WEB-INF/lib 配下にコピーする 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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>mywebapp</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <servlet-name>javax.ws.rs.core.Application</servlet-name> </servlet> <servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/ws/*</url-pattern> </servlet-mapping> </web-app> サービスの作成 †サービスの公開とサーバの開始 †サーバを作成し、公開および開始する 動作確認 †ブラウザから以下のURLにアクセスする †http://localhost:8080/mywebapp/ws/books/1 |