gpt4 book ai didi

java - 如何在 Jersey 中映射以分号分隔的 PathParams?

转载 作者:搜寻专家 更新时间:2023-10-30 19:54:47 24 4
gpt4 key购买 nike

有没有办法使用这个参数样式:

/products/123;456;789

在带有 Jersey 的 JAX-RS 中?如果我使用 PathParam,则只返回列表中的第一个参数。我试图转义分号,但 Jersey 仅返回“123;456;789”作为第一个参数列表条目的值

我将 GET 方法声明为

public List<Product> getClichedMessage(@PathParam("ids") List<String> idList)

更新:我指的是 Jersey 1.1.5 的 Jersey user guide:

In general the Java type of the method parameter may (...) 4) be List, Set or SortedSet, where T satisfies 2 or 3 above. The resulting collection is read-only. (...) Sometimes parameters may contain more than one value for the same name. If this is the case then types in 4) may be used to obtain all values.

更新:这是我的测试代码:

package de.betabeans.resources;

import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

@Path("/test")
public class TestResource {

@GET
@Path("/{ids}")
@Produces({"text/plain"})
public String getClichedMessage(@PathParam("ids") List<String> idList) {
return "size=" + idList.size();
}

}

分号转义的测试 URL:http://localhost:8080/resources/test/1%3B2%3B3

更新:changelog for Jersey 1.3 包含以下信息:

Fixed issue 540
http://java.net/jira/browse/JERSEY-540 Parameterized types of List/Set/SortedSet are supported for parameters, for example @QueryParam("d") List>, if there is a StringReaderProvider registered that supports the type List.

我会根据这篇文章 http://comments.gmane.org/gmane.comp.java.jersey.user/7545 查看 StringReaderProvider

最佳答案

当你使用分号时,你创建了 Matrix parameters 。您可以使用 @MatrixParamPathSegment 来获取它们。示例:

 public String get(@PathParam("param") PathSegment pathSegment)

请注意,Matrix 参数是那些跟在原始参数之后的参数。所以在 "123;456;789"的情况下 - 123 是路径参数,而 456 和 789 是矩阵参数的名称。

所以如果你想通过id获取产品,你可以这样做:

public List<Product> getClichedMessage(@PathParam("ids") PathSegment pathSegment) {
Set<String> ids = pathSegment.getMatrixParameters().keySet();
// continue coding
}

注意你的url应该是/products/ids;123;456;789

实际上,IMO 这不是一个很好的设计:您使用矩阵参数名称作为值。我认为使用查询参数更好:/products?id=123&id=456&id=789,因此您可以轻松地在方法中获取它们:

public List<Product> getClichedMessage(@QueryParam("id") List<String> ids)

关于java - 如何在 Jersey 中映射以分号分隔的 PathParams?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5503272/

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