【发布时间】:2011-03-31 16:39:38
【问题描述】:
有没有办法使用这个参数样式:
/products/123;456;789
在 JAX-RS 和泽西岛?如果我使用 PathParam,则只返回列表中的第一个参数。我试图转义分号,但随后 Jersey 只返回“123;456;789”作为第一个参数列表条目的值
我将 GET 方法声明为
public List<Product> getClichedMessage(@PathParam("ids") List<String> idList)
更新:我指的是 Jersey 1.1.5 的 Jersey user guide:
一般来说方法的Java类型 参数可能 (...) 4) 是列表, Set 或 SortedSet,其中 T 满足以上 2 或 3 条。所结果的 集合是只读的。 (...) 有时参数可能包含更多 比同名的一个值。如果 就是这种情况,然后输入 4) 可能 用于获取所有值。
更新:这是我的测试代码:
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 包含此信息:
修复问题 540
http://java.net/jira/browse/JERSEY-540 参数化类型 支持 List/Set/SortedSet 参数,例如 @QueryParam("d") 列表>, 如果有 StringReaderProvider 注册支持该类型 列表。
我会根据这篇帖子http://comments.gmane.org/gmane.comp.java.jersey.user/7545查看StringReaderProvider
【问题讨论】:
-
关于第二次更新:抱歉,这样你是不会成功的。您继续使用矩阵参数,而您认为分号是路径参数的分隔符。它不是。它不会成为一个。它是矩阵参数的分隔符,用于创建像 /moremaps.com/map/color;lat=50;long=20;scale=32000 这样的 url