@QueryParam检索表单参数

时间:2014-11-19 08:43:19

标签: java rest kendo-ui jersey jax-rs

我有以下格式从浏览器发送的查询参数

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

1 个答案:

答案 0 :(得分:1)

@QueryParam应从附加到请求网址末尾的Query String获取。像

这样的东西
http://host:port/app/something?key1=value2&key2=value2

然后,您可以使用

获取value1value2
@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]"