我有以下格式从浏览器发送的查询参数
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
答案 0 :(得分:1)
@QueryParam
应从附加到请求网址末尾的Query String获取。像
http://host:port/app/something?key1=value2&key2=value2
然后,您可以使用
获取value1
和value2
@QueryParam("key1") String value1,
@QueryParam("key2") String value2
现在在帖子的标题中,您使用" Form"这个词。如果这是您尝试提交的表单数据,则应考虑一些事项。将表单数据放入查询字符串时,通常使用不敏感的数据,主要用于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
或,如果您知道密钥,这些密钥显示在您在评论中发布的网址
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]"