2012-08-09 199 views
5

我有一個啓用了休息的Web服務,它返回RETURN_OBJ使用複雜對象從REST Web服務返回JSON對象

然而,RETURN_OBJ本身包含幾個複雜的對象,如其他類,地圖對象list

在這種情況下,將註釋參與班級,@XmlRootElement@Produces("application/json")足夠的註釋Web服務?

因爲只是這樣做不起作用,我得到no message body writer found for class錯誤。

這個錯誤的原因,原因和解決方法是什麼?

+0

我希望你會搜索SO或谷歌與你的異常.. HTTP:/ /stackoverflow.com/questions/9256112/no-message-body-writer-found-json-apache-cxf-restful-webservices – Sikorski 2012-08-09 13:27:36

回答

2
@XmlRootElement 

您需要使用帶有json註釋而不是xml註釋的庫。例如:傑克遜(http://jackson.codehaus.org/)。您可以嘗試使用xml編寫器來編寫json。

@Produces("application/json") 

當類使用json註釋註釋時,將返回json。

5

我希望這可以幫助一點,
以下爲恢復其使用Gson構建與Poster測試的網址是域名JSON對象的工作示例://端口項目名/服務/ 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:我不想給擡起頭,傑克遜之間的戰鬥VS GSON ;-)