java - 编写 QBE Restful 方法的最佳方法?

标签 java rest seam resteasy

我正在使用 RESTeasy 和 Seam 开发一些 Web 服务。我想要创建的服务之一是“按示例查询”服务。

我首先尝试像这样编写代码:

@GET
@Produces("application/xml")
@Consumes("application/xml")
@Path("/matching")
public MessageList getMatchingMessages(Message msg);

不幸的是,这给客户端带来了麻烦:

[testng] [Parser] Running:
[testng]   C:\Users\bdw\workspace-shepherd\GPRI\test-build\testng-Test.xml
[testng] java.lang.RuntimeException: java.lang.ClassCastException: org.apache.commons.httpclient.methods.GetMethod cannot be cast to org.apache.commons.httpclient.methods.EntityEnclosingMethod
[testng]    at org.jboss.resteasy.client.core.ClientInvoker.invoke(ClientInvoker.java:104)
[testng]    at org.jboss.resteasy.client.core.ClientProxy.invoke(ClientProxy.java:59)
[testng]    at $Proxy138.getMatchingMessages(Unknown Source)

等等。此方法的一个变体允许指定日期范围,但显然,这种形式也不起作用:

@GET
@Produces("application/xml")
@Consumes("application/xml")
@Path("/matching")
public MessageList getMatchingMessages(@QueryParam("startDate") Date start,
        @QueryParam("endDate") Date end, Message msg);

当我开始思考时,将 Message 传递给 GET 方法可能会违反 REST 的精神。当然,从方法中删除 Consumes 注释可以让客户端运行时不会出现这些错误。但它引出了一个问题,编写采用非基于 URL 的 XML 输入并生成 XML 输出的查询方法的正确方法是什么?或者同时采用 XML 和基于 url 的参数并生成 XML 输出?

最佳答案

您认为您可能想要缓存结果吗?如果答案是否定的,那么您可以简单地使用 POST 来代替。

POST /QueryEngine
Content-Type: application/xml

=>
200 OK
Content-Type: application/xml

如果答案是您可能想缓存结果,那么您可以这样做:

POST /QueryGenerator
Content-Type: application/xml

=>
303 See Other
Location: /GeneratedQuery/2323

GET /GeneratedQuery/2323

说了这么多,您确定不能只使用查询参数而不传递 XML 吗?

关于java - 编写 QBE Restful 方法的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4157756/

相关文章:

java - Minecraft 1.9 模组 block 渲染错误

database - Seam 的服务器端分页模式?

java - 接缝奇怪的参数错误

java - 从文档中运行 jax-ws 示例时出现异常

java - 我使用的是哪个 JRE?

java - 如何让我的彩色图标显示在我的 GUI 上?

ruby-on-rails - HTML 发布期间的嵌套模型参数

android - 如何为同一键的多个值构造 URI 查询?

java - 哪里有示例 JAX-RS 客户端示例?

java - 确定 JSF 容器表单的 ID