1

サンプル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リストまたは配列にクエリパラメーターを挿入する方法を知っている場合は
  、教えてください。

よろしくお願いします。

4

0 に答える 0