2011-11-17 88 views
7

如何返回XML或JSON中的Question對象列表?使用JAX-RS返回對象列表

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

我得到這個異常:

嚴重:映射的異常反應:500(內部服務器錯誤) javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException :爲Java 類java.util.Vector,和Java類型 java.util.List的,和MIME媒體消息正文作家 類型的應用/八位字節流沒有被發現

回答

4

嘗試:

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

如果你的目標是返回項的列表,你可以使用:

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

編輯 增加原創的答案以上

+0

似乎不有所作爲:( – LuckyLuke

+0

見編輯,只是出於興趣,你使用? – Thys

+2

我沒有添加對域類的@XmlRootElement註釋什麼版本的JAX是,現在的作品。它確實與你一起工作,然後第一個例子:) – LuckyLuke

0

您的Web服務可能會是這樣:

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

,那麼你應該創建一個提供者,MessageBodyWriter:

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

} 
6

在我的情況下,同樣的問題被加入POJOMappingFeature初始參數的REST servlet的解決,所以它看起來像這樣:

<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> 

現在它甚至可以在Weblogic 12c上返回List。

3

首先,您應該設置適當的@Produces註釋。 第二,你可以使用GenericEntity序列化一個列表。

@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(); 
}