有没有办法使用这个参数样式:
在泽西的JAX-RS中?如果我使用PathParam,则只返回列表中的第一个参数。我试图逃脱分号但是泽西只返回“123; 456; 789”作为第一个参数列表条目的值/产品/ 123; 456; 789
我将GET方法声明为
public List<Product> getClichedMessage(@PathParam("ids") List<String> idList)
更新:我指的是泽西岛1.1.5的Jersey user guide:
一般来说,该方法的Java类型 参数可以(...)4)是List, 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();
}
}
使用分号转义测试网址: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”)列表&gt;, 如果有StringReaderProvider 注册支持该类型 列表。
我将根据这篇文章http://comments.gmane.org/gmane.comp.java.jersey.user/7545
查看StringReaderProvider答案 0 :(得分:21)
使用分号时,您需要创建Matrix parameters。
您可以使用@MatrixParam
或PathSegment
来获取它们。例如:
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
}
请注意您的网址应为/products/ids;123;456;789
实际上,IMO并不是一个很好的设计:你使用矩阵参数名作为值。我认为使用查询参数更好:/products?id=123&id=456&id=789
,因此您可以轻松地在方法中获取它们:
public List<Product> getClichedMessage(@QueryParam("id") List<String> ids)