Java 如何在Jersey中映射分号分隔的PathParams?
是否有使用此参数样式的方法: /产品/123 ;;456;789 用JAX-RS和Jersey?如果使用PathParam,则只返回列表中的第一个参数。我试图转义分号,但Jersey只返回“123;456;789”作为第一个参数列表项的值 我将GET方法声明为Java 如何在Jersey中映射分号分隔的PathParams?,java,rest,jersey,jax-rs,Java,Rest,Jersey,Jax Rs,是否有使用此参数样式的方法: /产品/123 ;;456;789 用JAX-RS和Jersey?如果使用PathParam,则只返回列表中的第一个参数。我试图转义分号,但Jersey只返回“123;456;789”作为第一个参数列表项的值 我将GET方法声明为 public List<Product> getClichedMessage(@PathParam("ids") List<String> idList) public List getClichedMessag
public List<Product> getClichedMessage(@PathParam("ids") List<String> idList)
public List getClichedMessage(@PathParam(“ids”)List idList)
更新:我指的是泽西1.1.5版:
通常,方法的Java类型
参数可以是(…)4)列表,
设置或分类数据集,其中T
满足2或3以上要求。结果
集合是只读的。(...)
有时,参数可能包含更多信息
相同名称的多个值。如果
这就是5月的情况
用于获取所有值
更新:这是我的测试代码:
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();
}
}
package de.betabeans.resources;
导入java.util.List;
导入javax.ws.rs.GET;
导入javax.ws.rs.Path;
导入javax.ws.rs.PathParam;
导入javax.ws.rs.products;
@路径(“/test”)
公共类测试资源{
@得到
@路径(“/{ids}”)
@产生({“文本/普通”})
公共字符串getClichedMessage(@PathParam(“ids”)列表idList){
返回“size=“+idList.size()”;
}
}
转义了分号的测试URL:
更新:包括以下信息:
固定问题540参数化类型 支持列表/设置/分类设置 例如,参数 @查询参数(“d”)列表>, 如果有StringReaderProvider 已注册的支持该类型的 名单
我将根据这篇文章查看StringReaderProvider,当您使用分号时,您将创建。 您可以使用
@MatrixParam
或路径段
获取它们。例如:
public String get(@PathParam("param") PathSegment pathSegment)
请注意,矩阵参数是跟随原始参数的参数。
所以在“123;456;789”的情况下,-123是路径参数,而456和789是矩阵参数的名称
因此,如果您想通过ID获取产品,可以执行以下操作:
public List<Product> getClichedMessage(@PathParam("ids") PathSegment pathSegment) {
Set<String> ids = pathSegment.getMatrixParameters().keySet();
// continue coding
}
谢谢你的建议!请看我的更新,在文档中,PathParam似乎也支持多个值。您可以编写类似@Path(“/url/{param}/和/{param}”)的代码因此@PathParam将被复制,并可以作为列表接收。但我认为这不是您想要的。是的,这是可行的,但URL中的参数数量必须与模式中的数量完全匹配。我的解决方法是使用字符串而不是列表,并在代码(String.split(ids))中进行解析。很明显,您的解决方法会起作用。您可以获取整个路径段并自己解析它。这样,您可以使用任何东西作为分隔符,它也会起作用。请注意,它不是非常RESTful,因为您使用预定义约定的方式与您应该使用的方式略有不同。好的,我将查看/products?id=123&id=456&id=789样式(不知道参数可能出现多次)。实际上,在Stackoverflow API中使用了分号分隔的参数(请参阅)关于第二次更新:抱歉,但这样做不会成功。您继续使用矩阵参数,而您认为分号是路径参数的分隔符。它不是。它也不会成为一个。它是矩阵参数的分隔符,用于创建URL,如/moremaps.com/map/color;lat=50;long=20;scale=32000
public List<Product> getClichedMessage(@QueryParam("id") List<String> ids)