2012-08-09 18 views
5

Tengo un servicio web habilitado para reposo que devuelve RETURN_OBJ.Devolver objeto JSON del servicio web REST con objetos complejos

Sin embargo, RETURN_OBJ en sí mismo contiene varios objetos complejos como list de objetos de otra clase, mapas, etc.

En tal caso, será la anotación de las clases participantes con @XmlRootElement y anotar servicio web con @Produces("application/json") suficiente?

Porque simplemente hacerlo no funciona y recibo el error no message body writer found for class.

¿Cuál es el motivo, la causa y la solución para este error?

+0

espero que habría buscado SO o Google con su excepción .. http://stackoverflow.com/questions/9256112/no-message-body-writer-found-json-apache-cxf-restful-webservices – Sikorski

Respuesta

2
@XmlRootElement 

Necesita utilizar una biblioteca con anotaciones json en lugar de anotaciones xml. ex: jackson (http://jackson.codehaus.org/). Puede intentar usar un escritor xml para escribir json.

@Produces("application/json") 

Cuando las clases se anotan con las anotaciones json, se devolverá json.

5

espero que esto podría ayudar un poco,
El siguiente es un ejemplo de trabajo para devolver un objeto JSON que fue construido usando Gson y probado con Poster y la url es nombre de dominio: // puerto Project_Name/servicios/descanso/getjson? name = gopi

Construye un objeto complejo como desees y finalmente conviértete en json usando Gson.

@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"; 
} 

}

PD: No quiero darle las cabezas para arriba para la pelea entre Jackson vs Gson ;-)

Cuestiones relacionadas