gpt4 book ai didi

java - JAX-RS @PathParam : how to pass anything including "?"

转载 作者:行者123 更新时间:2023-12-01 09:07:11 24 4
gpt4 key购买 nike

我有以下带有 @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 以便该方法可以接受任何内容

最佳答案

您尝试在 URL 中使用的内容

?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 ?

关于java - JAX-RS @PathParam : how to pass anything including "?",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41176076/

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