ひこぽんのーと

覚書と雑記です。

JavaEE 7をやってみよう。 JAX-RS その2

その1のつづき。

RESTというのは、URLにパラメータを含めることができる。
URLの最後に付けられるクエリのことではなく、
パスそのものがパラメータとして扱える。

http://localhost:8080/{アプリケーション名}/rest/ship」
前回、このURLでテキストを返すプログラムを書いたが、
これを拡張し、URLからパラメータを取るように変えてみる。

package jaxrs;

import javax.enterprise.context.RequestScoped;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;


@RequestScoped
@Path("ship")
public class ShipResource {
    
    @GET
    @Produces("text/plain")
    public String getText() {
        return "This is user!";
    }

    @GET
    @Produces("text/plain")
    @Path("/{shipid}")
    public String getShipInfoText(@PathParam("shipid") String shipId) {
        return "Your ID is " + shipId + ".";
    }
    
}

getShipInfoTextメソッドを追加したのだが、
ここでのポイントは3つ。
1つ目はメソッドに付けた@Pathアノテーション
@Pathアノテーションは、クラスとメソッドにつけることができる。
クラスに付けたパスとメソッドに付けたパスは親子関係となる。
アクセスする際は「クラスに付けたパス/メソッドに付けたパス」でアクセスすれば、
目的のメソッドが実行できる。

2つ目は@PathアノテーションのURLに記述されている中括弧。
パスが中括弧で囲われている場合、それは固定のURLではなく、
可変のパラメータとして扱うことができる。

3つ目はメソッド引数につけた@PathParamアノテーション
@PathParamアノテーションを使うことで、
URLのパラメータをメソッドの引数に渡すことができる。

URL: http://localhost:8080/{アプリケーション名}/rest/ship/aabbccを実行して動作確認をしてみる。
結果はこんな感じ。
f:id:nagamitsu1976:20150808111944p:plain

ちゃんとURLから値を取得し、メソッドの引数に渡されていることがわかる。
といったところで、次回へ続く。