2012-08-09 6 views
5

Mam udostępnioną usługę WWW z włączoną funkcją spoczynku, która zwraca RETURN_OBJ.Zwracanie obiektu JSON z usługi sieci Web REST z obiektami złożonymi

Jednak RETURN_OBJ w sobie zawiera wiele skomplikowanych obiektów jak list obiektów z innej klasy, mapy, itp

W takim przypadku będzie opisywanie klas uczestniczących w @XmlRootElement i adnotacji usługę internetową z @Produces("application/json") wystarczy?

Bo właśnie to robi nie działa i dostaję błąd no message body writer found for class.

Jaki jest powód, przyczyna i rozwiązanie tego błędu?

+0

mam nadzieję byś szukał SO lub Google z wyjątkiem .. http://stackoverflow.com/questions/9256112/no-message-body-writer-found-json-apache-cxf-restful-webservices – Sikorski

Odpowiedz

2
@XmlRootElement 

Musisz użyć biblioteki z adnotacjami json zamiast adnotacji xml. np. jackson (http://jackson.codehaus.org/). Możesz spróbować użyć pisarza xml, aby napisać json.

@Produces("application/json") 

Gdy zajęcia są opatrzone adnotacjami json, json zostanie zwrócony.

5

Mam nadzieję, że to może pomóc trochę,
Poniżej przedstawiono przykład pracy dla powracających obiekt JSON, który został zbudowany przy użyciu Gson i przetestowany z Poster i adres URL jest nazwadomeny: port // PROJECT_NAME/usług/reszta/getjson? name = gopi

Skonstruuj złożony obiekt, jak chcesz iw końcu przekonwertuj go na json za pomocą 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"; 
} 

}

PS: nie chcę dać głowy aż do walki pomiędzy Jackson vs Gson ;-)

Powiązane problemy