2011-11-17 18 views
7

Làm cách nào để trả về danh sách đối tượng Câu hỏi bằng XML hoặc JSON?Trả lại danh sách các đối tượng khi sử dụng JAX-RS

@Path("all") 
@GET 
public List<Question> getAllQuestions() { 
    return questionDAO.getAllQuestions(); 
} 

tôi nhận được ngoại lệ này:

NGHIÊM TRỌNG: Mapped ngoại lệ đối với phản ứng: 500 (Internal Server Error) javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException : Một nhà văn nội dung thư cho Java lớp java.util.Vector, và loại Java java.util.List, và phương tiện truyền thông MIME application/octet-stream không được tìm thấy

Trả lời

4

Hãy thử:

@Path("all") 
@GET 
public ArrayList<Question> getAllQuestions() { 
    return (ArrayList<Question>)questionDAO.getAllQuestions(); 
} 

Nếu mục tiêu của bạn là để trả về một danh sách các mục mà bạn có thể sử dụng:

@Path("all") 
@GET 
public Question[] getAllQuestions() { 
    return questionDAO.getAllQuestions().toArray(new Question[]{}); 
} 

Sửa Thêm câu trả lời ban đầu trên

+0

dường như không tạo sự khác biệt :( – LuckyLuke

+0

Xem chỉnh sửa, chỉ ra quan tâm, những gì phiên bản của JAX bạn đang sử dụng? – Thys

+2

tôi đã không được thêm vào các chú thích @XMLRootElement trên lớp miền, bây giờ nó hoạt động. Nó đã làm việc với bạn ví dụ đầu tiên sau đó :) – LuckyLuke

0

webservice của bạn có thể trông như thế này :

@GET 
@Path("all") 
@Produces({ "application/xml", "application/*+xml", "text/xml" }) 
public Response getAllQuestions(){ 
List<Question> responseEntity = ...; 
return Response.ok().entity(responseEntity).build(); 
} 

thì bạn nên tạo ra một nhà cung cấp, MessageBodyWriter:

@Produces({ "application/xml", "application/*+xml", "text/xml" }) 
@Provider 
public class XMLWriter implements MessageBodyWriter<Source>{ 

} 
6

Vấn đề tương tự trong trường hợp của tôi đã được giải quyết bằng cách thêm param POJOMappingFeature init đến servlet REST, để nó trông như thế này:

<servlet> 
    <servlet-name>RestServlet</servlet-name> 
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> 

    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</servlet> 

Bây giờ nó thậm chí hoạt động với danh sách trả về trên Weblogic 12c.

3

Trước hết, bạn nên đặt chú thích @Produces thích hợp. Và thứ hai, bạn có thể sử dụng GenericEntity để tuần tự hóa danh sách.

@GET 
@Path("/questions") 
@Produces({MediaType.APPLICAtION_XML, MediaType.APPLICATION_JSON}) 
public Response read() { 

    final List<Question> list; // get some 

    final GenericEntity<List<Question>> entity 
     = new GenericEntity<List<Question>>() {}; 

    return Response.ok(entity).build(); 
} 
Các vấn đề liên quan