3.1.4.5.1. リソース(アクション)クラスの実装に関して¶
3.1.4.5.1.1. リソースクラスのメソッドのシグネチャ¶
リソースクラスのメソッドの引数及び戻り値で利用できる型について示す。
- メソッド引数
引数定義 説明 引数無し パラメータやリクエストボディを必要としない場合には、引数無しとしてメソッドを定義できる。
- 例
public HttpResponse sample() { // 省略 }
フォーム(Java Beans) リクエストボディから変換したフォームを元に処理を行う場合には、引数としてフォームを定義する。
- 例
public HttpResponse sample(SampleForm form) { // 省略 }
HttpRequest パスパラメータ や クエリパラメータ を使う場合やHTTPヘッダの値などを取得したい場合には、引数として HttpRequest を定義する。
- 例
public HttpResponse sample(HttpRequest request) { // 省略 }
ExecutionContext ExecutionContext が提供するスコープ変数にアクセスしたい場合は、 引数として ExecutionContext を定義する。
- 例
public HttpResponse sample(ExecutionContext context) { // 省略 }
組み合わせ 用途に応じて上記の型を組み合わせることが出来る。
例えば、HTTPヘッダ情報とリクエストボディから変換されたFormを必要とするメソッドでは、以下の定義となる。
public HttpResponse sample(SampleForm form, HttpRequest request) { // 省略 }
- メソッド戻り値
戻り値の型 説明 void レスポンスのボディが空であることを示す 204: NoContent
をクライアントに返却する。フォーム(Java Beans) メソッドから戻されたフォームを リクエストボディ変換ハンドラ で、レスポンスボディに出力する内容に変換しクライアントに返却する。 HttpResponse メソッドから戻された HttpResponse の情報を、クライアントに返却する。
3.1.4.5.1.2. パスパラメータを扱う¶
検索や更新、削除対象のリソースを示す値をパスパラメータとして指定する場合の実装方法を示す。
- URLの例
GET /users/123
の123
をパスパラメータとする。- ルーティングの設定
URLとアクションとのマッピング時にパスパラメータ部に任意の名前を設定する。 この例では、
id
という名前を設定し、数値のみを許容する設定としている。詳細は、 ルーティングアダプタ を参照。
<routes> <get path="users/:id" to="UsersResource#find"> <requirements> <requirement name="id" value="\d+$" /> </requirements> </delete> </routes>
- リソースクラスのメソッドの実装
パスパラメータは、 HttpRequest から取得する。 このため、リソースのメソッドには、仮引数として HttpRequest を定義する。
HttpRequest に指定するパラメータ名には、 ルーティングの設定で指定したパスパラメータの名前を使用する。
@Produces(MediaType.APPLICATION_JSON) public User delete(HttpRequest req) { // HttpRequestからパスパラメータの値を取得する Long id = Long.valueOf(req.getParam("id")[0]); return UniversalDao.findById(User.class, id); }
重要
JSRで規定されている PathParam は使用できないので注意すること。
3.1.4.5.1.3. クエリーパラメータを扱う¶
リソースの検索処理で、検索条件をクエリーパラメータとして指定させたい場合がある。 このような場合の実装方法を以下に示す。
- URLの例
GET /users/search?name=Duke
- ルーティングの設定
ルーティングの設定では、クエリーパラメータを除いたパスを元に、リソースクラスとのマッピングを行う。
<routes> <get path="users/search" to="Users#search"/> </routes>
- リソースクラスのメソッドの実装
クエリーパラメータは、 HttpRequest から取得する。 このため、リソースのメソッドには、仮引数として HttpRequest を定義する。
HttpRequest から取得したパラメータを BeanUtil を使ってFormクラスにマッピングする。
public HttpResponse search(HttpRequest req) { // リクエストパラメータをBeanに変換 UserSearchForm form = BeanUtil.createAndCopy(UserSearchForm.class, req.getParamMap()); // バリデーションの実行 ValidatorUtil.validate(form) // 業務ロジックを実行する(省略) } // クエリーパラメータをマッピングするForm public UserSearchForm { private String name; // 省略 }
重要
JSRで規定されている QueryParam は使用できないので注意すること。