Jerseyの@PathParamはスラッシュの間に複数指定できる

公開日: : プログラム ,

http://hoge-api/user/{id}.{format} のような URL も以下のように @PathParam を2つ指定すれば、それぞれのパラメータを取得できるというメモ。

@GET
@Path("/user/{id}.{format}")
@Produces(MediaType.APPLICATION_JSON)
public Response getData(@PathParam("id") String id, @PathParam("format") String format) {
    //
}

こういう指定ができないものと勝手に勘違いしていたのだが同じ間違いをしないように、という教訓のメモ。

icatch-jersey_multi_pathparams

目次

1. どのように勘違いしていたのか

URL のスラッシュ(”/”)の間に @PathParam は1つしか書けないと思っていた。例えば以下のような URL 。

  • http://hoge-api/user/{id}.{format} ← こういう書き方はできないと思っていた

なので、次のような URL でしか表現できないと勘違いしていた。

  • http://hoge-api/user/{id_and_format}
  • http://hoge-api/user/{id}/{format}

2. 検証

ここまででこの記事に書きたいことは全部書いたが、もうちょっとヒントになりそうなことも書いておく。

2-1. 仕様例

http://hoge-api/user/{id}.{format} に GET でアクセスするとユーザ情報が取得できる、という API だったとする。

  • “{id}” にユーザ IDを指定する
  • “{format}” に “json” とか “xml” などレスポンスボディの形式を指定する

2-2. ソフトウェアのバージョン

検証に使った主なソフトウェアのバージョンは以下の通り。

  • Java: Java8
  • Jersey: 2.13
  • Jetty: 9.3.0.v20150612

この検証に直接関係ないものも含まれているが、Jersey 関連の dependency は以下の通り。

<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
  <version>${jersey2.version}</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-moxy</artifactId>
  <version>${jersey2.version}</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
  <version>${jersey2.version}</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-bean-validation</artifactId>
  <version>${jersey2.version}</version>
</dependency>

また、アプリケーションを Jetty で動かすための plugin 設定は次の通り。

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>9.3.0.v20150612</version>
  <configuration>
    <scanIntervalSeconds>2</scanIntervalSeconds>
    <webApp>
      <contextPath>/hoge-api</contextPath>
    </webApp>
  </configuration>
</plugin>

2-3. プログラム

すでに冒頭でも書いたが、http://hoge-api/user/{id}.{format} に対応するリソースクラスのメソッド例は以下の通り。

@GET
@Path("/user/{id}.{format}")
@Produces(MediaType.APPLICATION_JSON)
public Response getData(@PathParam("id") String id, @PathParam("format") String format) {
    //
}

3. 更新履歴

  • 2015/10/22: 初版作成

Googleアドセンス用(PC)

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

関連記事

no image

GoogleGuavaのRangeを使って範囲判定を簡潔に書く

次のような判定処理を if 文で書くことがよくある。 もし 100 よりも大きければ(=大小判定

記事を読む

icatch_4365495446-resized

CentOS6.5にGitをソースコードからインストールする

CentOS 6.5 の64ビット版を "Minimal" でインストールした環境で、git sta

記事を読む

icatch-pray_c916c87577_mini-thumbnail

Eclipse がエラーメッセージを出力して起動しなくなった場合の対処法

Eclipse の exe ファイルをクリックすると(または、実行すると)、 Eclipse のスプ

記事を読む

icatch-2015-004-1

Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に Octopress をインス

記事を読む

icatch-2015-005-1

ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。 正常系テストの場合: 正

記事を読む

icatch_8617990318-resized

yum が参照するミラーサイトの baseurl を変更して日本国内のものに設定する

yum が参照するリポジトリのミラーサイトは変更することができます。 このミラーサイトを日本国内のも

記事を読む

no image

CVS でタグ間で変更があったファイルを抽出するスクリプト

今どきバージョン管理ツールに CVS を使っているところは珍しいと思うし、あまり需要はないだろうけど

記事を読む

icatch_8626992930-resized

シェルスクリプトでcdしたいパスにスペースが入っている場合の対処法

cd したいパスにスペースが入っていると、パスの先頭からスペースまでを「移動したいパス」と解釈されて

記事を読む

icatch-sublimetext_9222613858_mini-thumbnail

Sublime Text3 のインストール直後に行った設定メモ

突発的に自宅のマシンにインストールしてあった Sublime Text2 を 3 にアップデートしま

記事を読む

icatch-9214710040_822a4c3456_z-resized

ロードアベレージを監視するシェルスクリプトを作成してみた

このブログを運用している Linux サーバの負荷が高い状態になってました。 何か被害にあったとかで

記事を読む

Googleアドセンス用(PC)

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


+ 6 = 七

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Googleアドセンス用(PC)

icatch-jersey_multi_pathparams
Jerseyの@PathParamはスラッシュの間に複数指定できる

http://hoge-api/user/{id}.{format}

icatch-vagrant_box_customize
VagrantのBoxファイルをカスタマイズして独自のBoxファイルを作成する

配布されている Vagrant の Box ファイルを使って検証環境を

icatch-2015-006-1
バリデーションチェックにJava8のOptionalを使ってスマートに書く(自分比)

Web アプリのバリデーションチェックにアノテーションを使うことが増え

icatch-2015-005-1
ユニットテストの偏りを防ぐ命名規則の付け方

ユニットテスト名に以下の命名規則を付けるようにして二ヶ月ぐらい経った。

icatch-2015-004-1
Vagrantで起動したCentOS上のOctopressをホストOSから確認する設定

タイトルの通りだが、Vagrant を使って起動した CentOS に

→もっと見る

PAGE TOP ↑