【问题标题】:JAX-RS @PathParam: how to pass anything including "?"JAX-RS @PathParam:如何传递包括“?”在内的任何内容
【发布时间】:2016-12-16 01:44:09
【问题描述】:

我有以下带有@PathParam 的 JAX-RS 方法。

@GET
@Produces(MediaType.APPLICATION_XML)
@Path("collect/{orderItemID}")
public Response collect(@PathParam("orderItemID") String orderItemID) {
    System.out.println("Order Item ID: " + orderItemID);
    ....
}

我希望该方法接受传递给它的任何内容。但是,当我传递以下字符串时,容器 WebLogic 返回 HTTP 404 Not Found。问题出在 ?在字符串的开头。如果我删除 ?,它将被接受,并且 System.out.println() 方法将打印出该值。

?ProductCode=yyy&EntityNo=1234&Name=what&FileReference=xxx

接下来我将@Path 更改为以下值:

@Path("collect/{orderItemID : (.+)?}")

这一次,当我用 ? 传递上述字符串时,不再出现 HTTP 404 Not Found。但是,在该方法内部,System.out.println() 现在会打印 orderItemID 的空白值。

如何指定@Path 以便该方法可以接受任何东西

【问题讨论】:

    标签: java rest jersey jax-rs


    【解决方案1】:

    您尝试在 URL 中使用的内容

    ?ProductCode=yyy&EntityNo=1234&Name=what&FileReference=xxx
    

    称为query string。这不是您尝试作为单个路径参数的东西。当 Jersey 检索到 URL 时,它将解析 URL 并提取查询字符串。由于?,它知道这是一个查询字符串。

    一旦有了查询字符串,它就会解析它,拆分=&,并以多种不同的方式提供键值对。将它们放入资源方法的一种方法是使用@QueryParam。有了这个注解,你就可以使用key,并且那个key的value会被传递给方法

    public Response collect(@QueryParam("ProductCode") String productCode,
                            @QueryParam("EntityNo") String entityNo,
                            @QueryParam("Name") String name,
                            @QueryParam("FileReference") String fileRef) {}
    

    如果您的目标是真正能够传递 anything 并且您的问题实际上是关于传递 ?(这不是对查询字符串的引用),那么您需要做什么有点像

    @Path("{anything: .*}")
    

    那么在客户端,你需要URL encode?

    【讨论】:

    • 嗨,我知道@QueryParam 并且我知道我可以将它用于查询字符串。但这不是我的问题。我希望客户端能够传递任何内容,包括恰好看起来像查询字符串的字符串。您的解决方案与我的原始解决方案具有相同的效果。如果客户端不编码?,容器将不会返回 HTTP 404,但在方法内部字符串将为空。客户端不应该知道它需要对 ? 进行编码。所以你是说没有办法通过?作为第一个字符而不对其进行编码?
    • 是的,客户端应该并且必须知道他们需要编码什么。客户端必须知道需要编码的特殊字符列表。这就是 URL 的工作原理。这与泽西岛无关。 =& 也是如此。这些是必须编码的特殊字符,如果它们不用于(查询字符串的)预期目的
    • OK peeskillet,我明白你的意思。感谢您的回复。我会接受你的回答。
    猜你喜欢
    • 2012-06-23
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-28
    • 2014-09-12
    • 2013-07-06
    相关资源
    最近更新 更多