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" として作成

必要なライブラリのダウンロード

ライブラリ名ダウンロード元補足
Jerseyhttps://jersey.java.net/download.html
jacksonhttp://wiki.fasterxml.com/JacksonDownloadAnnotations、Streaming API、Databind の3つをダウンロード

※ うまく動かない時は、ライブラリのバージョン等に問題がある可能性があるので 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
※IDを指定して表示


トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-08-12 (水) 19:03:40 (3179d)