2012-08-09 35 views
5

Tôi có một dịch vụ web được bật còn lại được hiển thị trả về RETURN_OBJ.Trả về đối tượng JSON từ Dịch vụ web REST với đối tượng phức tạp

Tuy nhiên, RETURN_OBJ tự nó chứa một số đối tượng phức tạp như list các đối tượng từ lớp khác, bản đồ vv

Trong trường hợp này, sẽ chú thích các lớp tham gia với @XmlRootElement và chú thích dịch vụ web với @Produces("application/json") đủ?

Vì chỉ thực hiện nó không hoạt động và tôi gặp lỗi no message body writer found for class.

Lý do, nguyên nhân và giải pháp cho lỗi này là gì?

+0

tôi hy vọng bạn sẽ tìm kiếm SO hoặc Google với ngoại lệ của bạn .. http://stackoverflow.com/questions/9256112/no-message-body-writer-found-json-apache-cxf-restful-webservices – Sikorski

Trả lời

2
@XmlRootElement 

Bạn cần sử dụng thư viện có chú thích json thay vì chú thích xml. ví dụ: jackson (http://jackson.codehaus.org/). Bạn có thể thử sử dụng một nhà văn xml để viết json.

@Produces("application/json") 

Khi các lớp được chú thích với chú thích json, json sẽ được trả lại.

5

Tôi hy vọng điều này có thể giúp đỡ một chút,
Sau đây là một ví dụ làm việc cho trở về một đối tượng JSON được xây dựng bằng Gson và thử nghiệm với Poster và url là domainname: cổng // PROJECT_NAME/dịch vụ/phần còn lại/getjson? name = gopi

Tạo một đối tượng phức tạp theo ý bạn và cuối cùng chuyển đổi thành json bằng 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: Tôi không muốn cho người đứng đầu lên cho cuộc chiến giữa Jackson vs Gson ;-)

Các vấn đề liên quan