我有@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以便该方法可以接受任何?
答案 0 :(得分:1)
您在网址中尝试使用的内容
?ProductCode=yyy&EntityNo=1234&Name=what&FileReference=xxx
称为query string。这不是您尝试作为单个路径参数的东西。当Jersey检索到URL时,它将解析URL并提取查询字符串。它知道它是一个查询字符串,因为?
。
一旦有了查询字符串,它就会解析它,拆分=
和&
,并以多种不同的方式使密钥值对可用。将它们放入资源方法的一种方法就是使用@QueryParam
。使用此注释,您可以使用该键,该键的值将传递给方法
public Response collect(@QueryParam("ProductCode") String productCode,
@QueryParam("EntityNo") String entityNo,
@QueryParam("Name") String name,
@QueryParam("FileReference") String fileRef) {}
如果您的目标是实际能够传递任何,那么问题实际上是关于传递?
(这不是对查询字符串的引用),当您需要时要做的就像是
@Path("{anything: .*}")
然后在客户端,您需要URL encode ?