如何以XML或JSON格式返回Question对象列表?
@Path("all")
@GET
public List<Question> getAllQuestions() {
return questionDAO.getAllQuestions();
}
我得到了这个例外:
SEVERE:映射异常响应:500(内部服务器错误) javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException:Java的消息体编写器 class java.util.Vector和Java类型 java.util.List和MIME媒体 类型application / octet-stream未找到
答案 0 :(得分:6)
尝试:
@Path("all")
@GET
public ArrayList<Question> getAllQuestions() {
return (ArrayList<Question>)questionDAO.getAllQuestions();
}
如果您的目标是返回可以使用的项目列表:
@Path("all")
@GET
public Question[] getAllQuestions() {
return questionDAO.getAllQuestions().toArray(new Question[]{});
}
修改强> 添加上面的原始答案
答案 1 :(得分:6)
我的案例中的同样问题是通过将POJOMappingFeature init param添加到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。
答案 2 :(得分: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();
}
答案 3 :(得分:0)
您的网络服务可能如下所示:
@GET
@Path("all")
@Produces({ "application/xml", "application/*+xml", "text/xml" })
public Response getAllQuestions(){
List<Question> responseEntity = ...;
return Response.ok().entity(responseEntity).build();
}
然后你应该创建一个Provider,MessageBodyWriter:
@Produces({ "application/xml", "application/*+xml", "text/xml" })
@Provider
public class XMLWriter implements MessageBodyWriter<Source>{
}