我有从浏览器以以下格式发送的查询参数
sort[0][field]:prodId
sort[0][dir]:asc
如何使用
@QueryParam
在服务器中检索以上参数?从Chrome控制台
take:5
skip:0
page:1
pageSize:5
sort[0][field]:prodId
sort[0][dir]:asc
最佳答案
应该从附加在请求URL末尾的Query String中获取@QueryParam
。就像是
http://host:port/app/something?key1=value2&key2=value2
然后,您可以使用
value1
和value2
@QueryParam("key1") String value1,
@QueryParam("key2") String value2
现在,在您的帖子标题中,使用“表格”一词。如果这是您要提交的表单数据,则应考虑一些事项。将表单数据放入查询字符串中时,通常是使用不敏感的数据完成的,并且主要用于
GET
请求,其中的参数值用于帮助过滤以获取资源。如果这是应该存储在服务器上的敏感数据,则通常需要将POST
数据作为请求主体中的表单数据,如your previous post的答案所示更新
如果您不知道使用
@QueryParam
所需的键名,则可以从注入的UriInfo
中获取整个查询字符串。就像是@GET
@Path("/path/to/resource")
public Response getKendo( @Context UriInfo uriInfo) {
MultivaluedMap params = uriInfo.getQueryParameters();
StringBuilder builder = new StringBuilder();
for (Object key : params.keySet()) {
builder.append(key).append(":")
.append(params.getFirst(key)).append("\n");
}
return Response.ok(builder.toString()).build();
}
getQueryParameters()
将返回MultivalueMap
中的所有键和值或者,如果您知道密钥,这些密钥将显示在注释中发布的URL中
test.jsp?take=5&skip=0&page=1&pageSize=5&sort%5B0%5D%5Bfield%5D=prodId&sort%5B0%5D%5Bdir%5D=asc
那么您只需将所有这些键用于
QueryParam
,即public Response getKendo(@QueryParam("take") int take,
@QueryParam("skip") int skip,
@QueryParam("page") int page,
@QueryParam("sort[0][field]") String field...) {
}
所有这些疯狂的东西
sort%5B0%5D%5Bfield%5D
就是使用特殊字符对URL进行编码的方式,但是JAX-RS会转换回其合法格式,即"sort[0][field]"