パラメータの受け取り その1
【概要】
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に指定した値をキーに値を取得します。
[実行するためのページ]
コンテキストルートまでのパスは各自のローカルに合わせてください。
<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>