サンプルwebappを作ってJAX-RSを学んでいるのですが、HTTPリクエストからJavaメソッドのパラメータへのパラメータインジェクションについて質問があります。
現在、会社の人事管理として想定されている Apache CXF を使用して、「cxftest01」という名前のサンプル JAX-RS プロジェクトのいくつかの Bean にクエリ パラメーターを挿入しようとしています。
それで、クラス「従業員」に続いていくつかの豆クラスを作り始めました
package com.sample.cxftest01.beans;
public class Employee {
private Name name;
private String division;
public Name getName() { return name; }
public void setName(Name name) { this.name = name; }
public String getDivision() { return division; }
public void setDivision(String division) { this.division = division; }
}
そして次のクラス「名前」
パッケージ com.sample.cxftest01.beans;
public class Name {
private String first;
private String last;
public String getFirst() { return first; }
public void setFirst(String first) { this.first = first; }
public String getLast() { return last; }
public void setLast(String last) { this.last = last; }
}
JAX-RS リソース クラスが次に続きます。
パッケージ com.sample.cxftest01.restapi;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.springframework.stereotype.Component;
import com.sample.cxftest01.beans.Employee;
@Component
@Path("employees")
public class EmployeeResource {
@GET
@Produces("application/json")
public Response getPerson(@QueryParam("") Employee employee)
{
return Response.ok(employee, MediaType.APPLICATION_JSON ).build();
}
}
上記のこれらのコードは機能しました。URLにアクセスしたところ、
http://localhost:8080/cxftest01/employees?
name.first=Joe&name.last=Hayek&division=SoftwareDevelopment
私のWebブラウザー(私は最新のChromeを使用しています)のアドレスバーに、ブラウザーは次のJSONを表示しました。
{"name":{"first":"Joe","last":"Hayek"},"division":"SoftwareDevelopment"}
次に、以下のシナリオを計画しました。次のようなクエリパラメーターで2人の従業員を指定するとします
name.first=Joe&name.last=Hayek&division=SoftwareDevelopment&
name.first=Meg&name.last=Tanaka&division=Sales
結果として次のJSONを取得できてうれしいです。
[
{"name":{"first":"Joe","last":"Hayek"},"division":"SoftwareDevelopment"},
{"name":{"first":"Meg","last":"Tanaka"},"division":"Sales"}
]
そこで、メソッド EmployeeResource#getPerson() を次のように変更しました。
@GET
@Produces("application/json")
public Response getPersons(@QueryParam("") List<Employee> employees)
{
return Response.ok(employees, MediaType.APPLICATION_JSON ).build();
}
そして、次の URL にアクセスしてみました。
http://localhost:8080/cxftest01/employees?
name.first=Joe&name.last=Hayek&division=SoftwareDevelopment&
name.first=Meg&name.last=Tanaka&division=Sales
、しかし、ブラウザは次のエラーメッセージを表示しました。
クラス java.util.List をインスタンス化できません
そこで、次の 2 点をお聞きします。
1) 上記のメッセージで示されるエラーが発生した理由は何ですか?
2)上記で説明したシナリオのように、JAX-RSリソースクラスのいくつかのメソッドのパラメーターとしてBeanリストまたは配列にクエリパラメーターを挿入する方法を知っている場合は
、教えてください。
よろしくお願いします。