パラメータの受け取り その1

【前提条件】

[環境]
[JAX-RSの設定]
  • @ApplicationPath("/service")

【概要】

JAX-RSで提供されているパラメータの受け取りです。
JAX-RSではパラメータを受け取るための
アノテーションが用意されています。

アノテーションはjavax.ws.rsパッケージにあります。

【サンプルコード】

package jp.glory.ui.service;

import java.net.URI;
import java.util.Map;

import javax.ws.rs.CookieParam;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.UriInfo;

@Path("param")
public class ParameterService {

    @GET
    @Path("path/{name}/{year}")
    @Produces(MediaType.TEXT_PLAIN)
    public String getUriParam(@PathParam("name") final String name, 
                              @PathParam("year") final String year) {

        return "[PathParam] Name : " + name + " Year : " + year;
    }

    @GET
    @Path("query")
    @Produces(MediaType.TEXT_PLAIN)
    public String getQueryParam(@QueryParam("name") final String name,
                                @QueryParam("year") final String year) {

        return "[QueryParm] Name : " + name + " Year : " + year;
    }

    @GET
    @Path("matrix")
    @Produces(MediaType.TEXT_PLAIN)
    public String getMatrixParam(@MatrixParam("name") final String name,
                                 @MatrixParam("year") final String year) {

        return "[MatrixParam] Name : " + name + " Year : " + year;
    }

    @POST
    @Path("post")
    @Produces(MediaType.TEXT_PLAIN)
    public String getFormParam(@FormParam("name") final String name,
                               @FormParam("year") final String year) {

        return "[FormParam] Name : " + name + " Year : " + year;
    }

    @GET
    @Path("cookie")
    @Produces(MediaType.TEXT_PLAIN)
    public String getCookieParam(@CookieParam("JSESSIONID") final String sessionId) {

        return "[CookieParam] JSESSIONID : " + sessionId;
    }

    @GET
    @Path("header")
    @Produces(MediaType.TEXT_PLAIN)
    public String getHeaderParam(@HeaderParam("User-Agent") final String userAgent) {

        return "[HeaderParam] UserAgent : " + userAgent;
    }

    @GET
    @Path("context")
    @Produces(MediaType.TEXT_PLAIN)
    public String getContext(
            @Context final UriInfo uriInfo,
            @Context final HttpHeaders header,
            @Context final Request request) {

        final URI absolutePath = uriInfo.getAbsolutePath();
        final Map<String, Cookie> cookies = header.getCookies();
        final String method = request.getMethod();

        return "[Context] Path : " + absolutePath + " JSESSIONID : " +
                cookies.get("JSESSIONID") + " Method : " + method;
    }
}
[PathParam]

PathParamはURLの値をパラメータとして受け取ります。
サンプルの場合、「path/Hoge/1986」というURLでアクセスすると
nameに「Hoge」、yearに「1986」という値が設定されます。

これはPathアノテーションで指定した{name}と{year}が、
PathParamのvalue値がnameとyearとそれぞれ紐づいていて、
変数に値が設定されます。

[QueryParam]

QueryParamはURLのクエリパラメータの値をパラメータとして受け取ります。
QueryParamに指定した値がパラメータ名となります。

サンプルの場合、「service/param/query?name=Foo&year=1987」というURLでアクセスすると
nameに「Foo」、yearに「1987」という値が設定されます。

[MatrixParam]

QueryPathとほぼ同じで、クエリパラメータではなく、
マトリックスパラメータで受け取ります。
サンプルの場合、「service/param/matrix;name=Var;year=1988」というURLでアクセスすると
nameに「Foo」、yearに「1987」という値が設定されます。

[FormParam]

FormParamはフォームで設定された値を取得します。
FormParamに指定した値がパラメータ名となります。

[CookieParam]

CookieParamはクッキーから値を取得します。
CookieParamに指定した値をキーに値を取得します。

[HeaderParam]

HeaderParamはヘッダーから値を取得します。
HeaderParamに指定した値をキーに値を取得します。

[Context]

Contextはコンテキストの情報を取得します。
取得できる情報は下のオブジェクトです。
 ・javax.ws.rs.core.Applicationクラス
 ・javax.ws.rs.core.UriInfoインターフェイス
 ・javax.ws.rs.core.Requestインターフェイス
 ・javax.ws.rs.core.HttpHeadersインターフェイス
 ・javax.ws.rs.core.SecurityContextインターフェイス
 ・javax.ws.rs.ext.Providersインターフェイス

[実行するためのページ]

コンテキストルートまでのパスは各自のローカルに合わせてください。

<html>
    <head>
        <title>JAX-RSサンプル</title>
        <style type="text/css">
            .area {
                margin-bottom: 20px;
            }
        </style>
    </head>
    <body>
        <div class="area" >
            <a href="../service/param/path/Hoge/1986">PathParam</a>
        </div>
        <div class="area" >
            <a href="../service/param/query?name=Foo&year=1987">QueryParam</a>
        </div>
        <div class="area" >
            <a href="../service/param/matrix;name=Var;year=1988">MatrixParam</a>
        </div>
        <div class="area" >
            <form action="../service/param/post" method="post">
                <input type="text" name="name" value="" /><br/>
                <input type="text" name="year" value="" /><br/>
                <input type="submit"  value="PostParam"/>
            </form>
        </div>
        <div class="area" >
            <a href="../service/param/cookie">CookieParam</a>
        </div>
        <div class="area" >
            <a href="../service/param/header">HeaderParam</a>
        </div>
        <div class="area" >
            <a href="../service/param/context">ContextParam</a>
        </div>
    </body>
</html>