5

を返す REST 対応 Web サービスを公開していますRETURN_OBJ

ただし、それ自体には、他のクラス、マップなどのRETURN_OBJオブジェクトのようないくつかの複雑なオブジェクトが含まれています。list

このような場合、参加するクラスにアノテーションを付けたり、@XmlRootElementWeb サービスにアノテーションを付けたりするだけで@Produces("application/json")十分でしょうか?

実行するだけでは機能せず、no message body writer found for classエラーが発生するためです。

このエラーの理由、原因、および解決策は何ですか?

4

2 に答える 2

5

これが少し役立つことを願っています。以下は、 Gsonを使用して構築され、 Posterでテストされ
たjsonオブジェクトを返すための実用的な例で あり、URLはdomainname:port // Project_name / services / rest / getjson?name=gopiです。

必要に応じて複雑なオブジェクトを作成し、最後にGsonを使用してjsonに変換します。

  @Path("rest")
public class RestImpl {

@GET
@Path("getjson")
@Produces("application/json")
public String restJson(@QueryParam("name") String name)
{
    EmployeeList employeeList = new EmployeeList();
    List<Employee> list = new ArrayList<Employee>();
    Employee e = new Employee();
    e.setName(name);
    e.setCode("1234");
    Address address = new Address();
    address.setAddress("some Address");
    e.setAddress(address);
    list.add(e);
    Employee e1 = new Employee();
    e1.setName("shankar");
    e1.setCode("54564");
    Address address1 = new Address();
    address.setAddress("Address ");
    e1.setAddress(address);
    list.add(e1);
    employeeList.setEmplList(list);

    Gson gson = new Gson();
    System.out.println(gson.toJson(employeeList));
    return gson.toJson(employeeList);

}

@GET
@Produces("text/html")
public String test()
{
    return "SUCCESS";
}

}

PS:ジャクソン対グソンの戦いに頭を下げたくない;-)

于 2012-08-09T14:33:31.647 に答える
2
@XmlRootElement

xml 注釈の代わりに json 注釈を含むライブラリを使用する必要があります。例: ジャクソン ( http://jackson.codehaus.org/ )。xml ライターを使用して json を書き込むことができます。

@Produces("application/json")

クラスに json アノテーションが付けられると、json が返されます。

于 2012-08-09T10:36:47.063 に答える