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