我有从浏览器发送的查询参数,格式如下
sort[0][field]:prodId
sort[0][dir]:asc如何使用@QueryParam检索服务器中的上述参数
从镀铬控制台
take:5
skip:0
page:1
pageSize:5
sort[0][field]:prodId
sort[0][dir]:asc发布于 2014-11-19 09:47:51
@QueryParam应该从附加到请求URL末尾的查询字符串中获得。有点像
http://host:port/app/something?key1=value2&key2=value2然后,您可以将value1和value2与
@QueryParam("key1") String value1,
@QueryParam("key2") String value2现在,在你的帖子标题中,你用了“表单”这个词。如果这是您要提交的表单数据,您应该考虑一些事情。在将表单数据放入查询字符串时,通常使用不敏感的数据,主要用于GET请求,其中参数值用于帮助筛选获取资源。如果这是应该存储在服务器上的敏感数据,则通常希望将数据作为表单数据在请求正文中进行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中的所有键和值。
如果您知道键,则为Alternatively,,该键显示在您在评论中发布的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是如何用特殊字符编码的,但是JAX-RS将转换回它们的合法形式,即"sort[0][field]"。
https://stackoverflow.com/questions/27012333
复制相似问题