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

发布于 2024-12-16 11:58:14 字数 436 浏览 0 评论 0原文

如何返回 XML 或 JSON 格式的 Question 对象列表?

@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 媒体 找不到类型 application/octet-stream

How can I return a list of Question objects in XML or JSON?

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

I get this exception:

SEVERE: Mapped exception to response: 500 (Internal Server Error)
javax.ws.rs.WebApplicationException:
com.sun.jersey.api.MessageException: A message body writer for Java
class java.util.Vector, and Java type
java.util.List, and MIME media
type application/octet-stream was not found

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

浊酒尽余欢 2024-12-23 11:58:14

尝试:

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

如果您的目标是返回项目列表,您可以使用:

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

编辑
上面添加了原来的答案

Try:

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

If your goal is to return a list of item you can use:

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

Edit
Added original answer above

明月松间行 2024-12-23 11:58:14

在我的例子中,通过将 POJOMappingFeature init 参数添加到 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。

The same problem in my case was solved by adding the POJOMappingFeature init param to the REST servlet, so it looks like this:

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

Now it even works with returning List on Weblogic 12c.

醉生梦死 2024-12-23 11:58:14

首先,您应该设置正确的 @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>>(list) {};

    return Response.ok(entity).build();
}

First of all, you should set proper @Produces annotation.
And second, you can use GenericEntity to serialize a list.

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

    return Response.ok(entity).build();
}
吹泡泡o 2024-12-23 11:58:14

您的 Web 服务可能如下所示:

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

}

Your webservice may look like this:

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

then you should create a Provider, MessageBodyWriter:

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

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文