Menu Close

47.2.5. 注入するデフォルト値の指定

概要

より堅牢なサービスの実装を実現するには、任意のオプションのパラメーターをデフォルト値に設定できるようにします。長い URI 文字列を入力するとエラーが発生しやすいため、クエリーパラメーターとマトリックスパラメーターから取得される値で特に便利です。また、要求システムがすべての値でクッキーを構築するための適切な情報を持っていない可能性があるため、クッキーから抽出されたパラメーターのデフォルト値を設定することもあります。

javax.ws.rs.DefaultValue アノテーションは、以下のインジェクションアノテーションと併用できます。

  • @PathParam
  • @QueryParam
  • @MatrixParam
  • @FormParam
  • @HeaderParam
  • @CookieParam

@DefaultValue アノテーションは、インジェクションアノテーションに対応するデータがリクエストに存在しない場合に利用するデフォルト値を指定します。

構文

パラメーターのデフォルト値を設定するための構文 は、@DefaultValue アノテーションを使用するための構文を示しています。

パラメーターのデフォルト値を設定するための構文

import javax.ws.rs.DefaultValue;
  ...
  void resourceMethod(@MatrixParam("matrix")
                      @DefaultValue("value)
                      int someValue, ... )
  ...

アノテーションは、パラメーター、Bean、またはフィールドの前に付けられる必要があります。付属のインジェクションアノテーションに対する @DefaultValue アノテーションの位置は重要ではありません。

@DefaultValue アノテーションは、単一のパラメーターを取ります。このパラメーターは、インジェクションアノテーションに基づいて適切なデータを抽出できない場合に、フィールドに挿入される値です。値は、任意の String 値にすることができます。値は、関連付けられたフィールドの型と互換性がある必要があります。たとえば、関連付けられたフィールドが int 型である場合、blue のデフォルト値では例外が発生します。

リストとセットの処理

アノテーション付きのパラメーター、Bean、またはフィールドが List、Set、または SortedSet の場合、結果となるコレクションには、指定されたデフォルト値からマッピングされた単一のエントリーが含まれます。

デフォルト値の設定 は、@DefaultValue を使用して値が中ニュされるフィールドのデフォルト値を指定する 2 つの例を示しています。

デフォルト値の設定

import javax.ws.rs.DefaultValue;
import javax.ws.rs.PathParam;
import javax.ws.rs.QueryParam;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@Path("/monster")
public class MonsterService
{

  @Get
  public Monster getMonster(@QueryParam("id") @DefaultValue("42") int id,
                            @QueryParam("type") @DefaultValue("bogeyman") String type)
  {
    ...
  }

  ...
}

デフォルト値の設定getMonster() メソッドは、GET リクエストが baseURI/monster に送信されると呼び出されます。メソッドでは、idtype の 2 つのクエリーパラメーターが URI に追加されることが想定されます。そのため、URI baseURI/monster?id=1&type=fomóiri を使用する GET リクエストは 1 の ID で Fomóiri を返します。

@DefaultValue アノテーションは両方のパラメーターに配置されるため、クエリーパラメーターが省略されると getMonster() メソッドが機能できます。baseURI/monster に送信された GET リクエストは、URI baseURI/monster?id=42&type=bogeyman を使用する GET リクエストと同等です。