5

我公开了一个启用了休息的 Web 服务,它返回RETURN_OBJ.

然而,RETURN_OBJ它本身包含几个复杂的对象,比如list来自其他类的对象、地图等。

在这种情况下,是否会用足够的注释来注释参与的类@XmlRootElement和注释 Web 服务?@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

随心所欲地构造一个复杂的Object,最后使用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

您需要使用带有 json 注释而不是 xml 注释的库。例如:杰克逊(http://jackson.codehaus.org/)。您可以尝试使用 xml writer 编写 json。

@Produces("application/json")

当使用 json 注释对类进行注释时,将返回 json。

于 2012-08-09T10:36:47.063 回答