Java 使用复杂对象从RESTWeb服务返回JSON对象

Java 使用复杂对象从RESTWeb服务返回JSON对象,java,json,apache,rest,cxf,Java,Json,Apache,Rest,Cxf,我公开了一个支持rest的web服务,它返回RETURN\u OBJ 但是,RETURN\u OBJ本身包含几个复杂的对象,如来自其他类、映射等的对象的list 在这种情况下,用@XmlRootElement注释参与类和用@注释web服务是否足以产生(“application/json”) 因为仅仅这样做是不起作用的,而且我没有找到类的消息体编写器 此错误的原因、原因和解决方案是什么 @XmlRootElement 您需要使用带有json注释的库,而不是xml注释。例:杰克逊()。您可以尝试使

我公开了一个支持rest的web服务,它返回
RETURN\u OBJ

但是,
RETURN\u OBJ
本身包含几个复杂的对象,如来自其他类、映射等的对象的
list

在这种情况下,用
@XmlRootElement
注释参与类和用
@注释web服务是否足以产生(“application/json”)

因为仅仅这样做是不起作用的,而且我没有找到类的消息体编写器

此错误的原因、原因和解决方案是什么

@XmlRootElement
您需要使用带有json注释的库,而不是xml注释。例:杰克逊()。您可以尝试使用xml编写器来编写json

@Produces("application/json")

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

我希望这可能会有所帮助,
下面是一个返回json对象的工作示例,该json对象是使用构建并测试的,url为domainname:port//Project\u 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";
}
@Path(“rest”)
公共类RestImpl{
@得到
@路径(“getjson”)
@生成(“应用程序/json”)
公共字符串restJson(@QueryParam(“name”)字符串名)
{
EmployeeList EmployeeList=新的EmployeeList();
列表=新的ArrayList();
员工e=新员工();
e、 集合名(名称);
e、 设置代码(“1234”);
地址=新地址();
地址。设置地址(“某些地址”);
e、 设置地址(地址);
列表.添加(e);
员工e1=新员工();
e1.设定名称(“shankar”);
e1.设定码(“54564”);
地址1=新地址();
地址。设置地址(“地址”);
e1.设置地址(地址);
列表。添加(e1);
employeeList.setemploylist(list);
Gson Gson=新的Gson();
System.out.println(gson.toJson(employeeList));
返回gson.toJson(employeeList);
}
@得到
@生成(“文本/html”)
公共字符串测试()
{
返回“成功”;
}
}


附:我不想为杰克逊和格森之间的争斗而放弃理智;-)

我希望你能搜索到SO或Google,但你例外。。