SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Java EE 6 開発入門

JAX-RSを使ったWebサービスのカスタマイズ

Java EE 6 開発入門(9)


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

 本連載は、Java Enterprise Edition 6(Java EE 6)の導入方法をはじめとして、新導入された仕様や概念を紹介していきます。今回はNetBeans IDEを使い、JAX-RSを使ったWebサービスを作成とカスタマイズについて紹介します。

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

対象読者

  • Java EE開発に興味ある方
  • これからJavaのWebアプリケーション開発をはじめる方

リソースクラスの作成で自動生成されるもの

 Webサービスを作成すると、Webサービスを定義するリソースクラスUserResource.javaとそれ以外に自動生成されるクラスがあります。NetBeansではリソースクラスに対してWebサービス定義のアノテーションを生成し、さらにJAX-RS用のアプリケーション定義用のクラスも生成します。

JAX-RSで定義可能なアノテーション

 前回作成したリソースクラスは、自動的に@Pathや@GETなどのアノテーションが作成されています。以下にアノテーション一覧を示します。

表1 JAX-RSで定義可能なアノテーションと用途
アノテーション 定義対象 用途
@Path クラス クラスのURIを定義。
@GET メソッド HTTPメソッドのGETから呼び出され、リソースの取得を記述する。
@POST メソッド HTTPメソッドのPOSTから呼び出され、リソースの更新を記述する。
@PUT メソッド HTTPメソッドのPUTから呼び出され、リソースの新規追加を記述する。
@DELETE メソッド HTTPメソッドのDELETEから呼び出され、リソースの削除を記述する。
@HEAD メソッド HTTPメソッドのHEADから呼び出される。
リソースが存在するか確認するために利用。
@Consumes メソッド クライアントから受信するコンテンツタイプを定義。
@Produces メソッド クライアントへ送信するコンテンツタイプを定義。
@PathParam メソッド引数 リソースのパラメータ部分に対して定義する。
@QueryParam メソッド引数 HTTPリクエストのクエリパラメータに対するリソースへ記載する。
@Provider メソッド @Consumesや@Producesで定義するコンテンツタイプへ送受信する
クラスであることを宣言する。単純な文字列以外にもbyte[]やファイル入出力、
データソース、XML、ストリーミング出力が設定可能になる。

 公開するWebサービスに応じてメソッドを追加し、そのメソッドの役割にあったアノテーションを付記していくと、Webサービスとして公開可能になります。

アプリケーション定義

 前回作成したWebサービスのURI「http://localhost:8080/SampleApp/webresources/user」に含まれている/webresourcesのパスは、RESTful Webサービスでリソースを作成した際にウィザードが自動生成するソースパッケージに含まれる「org.netbeans.rest.application.config」パッケージのApplicationConfig.javaで設定しています。NetBeansはこれを自動的に生成し、GlassFishサーバが自動的に読み込んでいます。なお、このクラスは編集しません。

リスト4 自動生成される設定クラス ApplicationConfig.java
package org.netbeans.rest.application.config;

import java.util.Set;
import javax.ws.rs.core.Application;

@javax.ws.rs.ApplicationPath("webresources") …(1)
public class ApplicationConfig extends Application {

    @Override
    public Set<Class<?>> getClasses() {
        return getRestResourceClasses();
    }

    /**
     * Do not modify this method. It is automatically generated by NetBeans REST support.
     */
    private Set<Class<?>> getRestResourceClasses() {
        Set<Class<?>> resources = new java.util.HashSet<Class<?>>();
        resources.add(sample.webservice.UserResource.class);
        try {
            Class<?> jacksonProvider = Class.forName("org.codehaus.jackson.jaxrs.JacksonJsonProvider");
            resources.add(jacksonProvider);
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(getClass().getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        return resources;
    }
}

 (1)の部分で、@javax.ws.rs.ApplicationPath("webresources")と設定されています。これが先ほどのURIに含まれるJAX-RS用のパスとして作用します。

リソース取得とパス定義

 次にリソース取得のパス定義について紹介します。従来のサーブレットを使ったWebアプリケーションではクエリ文字列や入力フォームから送信するパラメータで対象のデータを指定して取得していますが、RESTの場合はこれらもパスで指定して、URIの一部とします。

 具体的な例を挙げて説明しましょう。例えば、ユーザー情報を検索し表示するサービスを用意し、サーバーへ送信されるパラメータはユーザーを一意に決定するユーザーIDを指定すると定義します。このリソースを定義するURIは次のようになります。

  • http://localhost:8080/SampleApp/webresources/user/[ユーザ-IDの値]

 このリクエストを受け取るクラスは次のようになります。

リスト5: 特定ユーザーリソースを返す UserResource.java
@Path("user/{userid}")
public class UserResource {
    …(省略)…
}

 URIが/user/ユーザーIDですので、クラスに付ける@Pathの値も変更します。追加した{userid}はuserの後ろに付けることを宣言しているため、userの次のパスはユーザーIDを示すリソースになります。そこで実際にこのユーザーIDを受け取るメソッドは、次のようになります。

リスト6 特定ユーザーリソースを返すGETメソッドを実装した UserResource.java
@Path("user/{userid}")
public class UserResource {
    …(省略)…
    @GET
    @Produces("text/plain")
    public String getText(@PathParam("userid") String id ) { …(1)
        return "This is JAX-RS Message,userid is " + id;
    }
}

 (1)の部分、メソッドの引数で@PathParamアノテーションとそれを受け取る引数を定義しています。@PathParamで定義しているのは、リクエストされたURIのパスの中にある「userid」をメソッドの引数であるidに紐づけています。

会員登録無料すると、続きをお読みいただけます

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

次のページ
終わりに

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Java EE 6 開発入門連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 東 浩二(アズマ コウジ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/7190 2013/07/05 07:12

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング