使用JAX-RS时返回对象列表

时间:2011-11-17 10:53:24

标签: java java-ee ejb jax-rs

如何以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未找到

4 个答案:

答案 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>{

}