gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:21:12 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com