Jboss Jaxrs将查询参数作为子项或根项
嗨,我正在处理的设计文档希望我有一个Jboss Jaxrs将查询参数作为子项或根项,jboss,jax-rs,Jboss,Jax Rs,嗨,我正在处理的设计文档希望我有一个 <root>/v1/installs/XYZ123/actions/next?app=1234ABCD HTTP/1.1 /v1/installs/XYZ123/actions/next?app=1234ABCD HTTP/1.1 然而,我能找到的唯一示例非常简单,并且只显示将在/next结尾的URL。 我在想这有点像?我错过了关键的一步 @GET @Produces({ "application/json" }) @Path("v1/ins
<root>/v1/installs/XYZ123/actions/next?app=1234ABCD HTTP/1.1
/v1/installs/XYZ123/actions/next?app=1234ABCD HTTP/1.1
然而,我能找到的唯一示例非常简单,并且只显示将在/next结尾的URL。
我在想这有点像?我错过了关键的一步
@GET
@Produces({ "application/json" })
@Path("v1/installs/{id}/actions<SOMETHINGHERE?>/next HTTP/1.1")
public Response getSetupCommands(@PathParam("id")
String id,@QueryParam("next") String next) {
@GET
@产生({“应用程序/json”})
@路径(“v1/installs/{id}/actions/next HTTP/1.1”)
公共响应getSetupCommands(@PathParam(“id”)
字符串id,@QueryParam(“下一个”)字符串(下一个){
我正在使用jboss和jaxrs
v1/installs/{id}/actions/{next : .+}
public Response getSetupCommands(@PathParam("id") String id,@PathParam("next") String next) {
对我的口味来说,这太黑客了,但我无法控制这种情况。为什么我觉得
HTTP/1.1
不应该是URL的一部分。您可能错误地阅读/理解了设计文档。如果它说请求应该是
GET /v1/installs/XYZ123/actions/next?app=1234ABCD HTTP/1.1
那么您只需要担心HTTP/1.1是一个HTTP版本,它将隐式地用于每个请求和响应
您最初的示例很好,但您应该将@QueryParam(“next”)
替换为@QueryParam(“app”)
下一步
实际上是路径的一部分
这个/v1/installs/{id}/actions/next
应该包含在@Path
中
此请求URL的完整语义如下所示:
获取next
(资源)控制器,我们将使用app
查询参数作为参数传递给该控制器
更新:举个例子
@Path(“/v1”)
公共类查询资源{
@得到
@路径(“/installs/{id}/actions/next”)
公共响应getResponse(@PathParam(“id”)字符串id,
@QueryParam(“应用程序”)字符串(应用程序){
StringBuilder sb=新的StringBuilder();
sb.append(“ID:”).append(ID)。append(
);
sb.append(“app参数:”)。append(app);
返回Response.ok(sb.toString()).build();
}
}
浏览器测试
火虫
Hmmm文档。或当我遇到大量的黑客时,我没有权力或输入。当你发送一个HTTP请求时,请求的第一行将是“代码> GET/BLA/BLAH/NET.APP= 1234 ABCD HTTP/ 1.1代码/代码>。<代码> GET是方法,其次是URL,其次是HTTP版本。是的,我早上起床时意识到我错了。删除http/1.1可以让你获得查询字符串,一切正常。我昨晚搞混了。分层时不要选择答案!:-)我忘了添加代码来读取查询字符串。感谢这些超级详细的示例。我希望我能给你一些提示再次指出。我非常肯定它在未来会得到几颗星。这是正确的答案。虽然peeskillet在文档化方面是正确的,但问题是问号。当我们使用查询参数时,问号会隐式添加到URL中。我们不必担心JAX-RS。URL会被解析,然后一切都会被解析r
?
将通过@QueryParam
成为可用的查询参数。您现在的做法是处理查询字符串的可怕方式。您链接到的mkyong教程使用了@QueryParam
。可能您没有正确理解教程:-)让我重新措辞“将问号隐式添加到URL”。使用forms和GET时,将隐式添加?
。但是?
的语义只是路径和查询字符串之间的分隔符。有关详细信息,请阅读
@Path("/v1")
public class QueryResource {
@GET
@Path("/installs/{id}/actions/next")
public Response getResponse(@PathParam("id") String id,
@QueryParam("app") String app) {
StringBuilder sb = new StringBuilder();
sb.append("ID: ").append(id).append("<br/>");
sb.append("app param: ").append(app);
return Response.ok(sb.toString()).build();
}
}