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 |