在jax-rs中获取unnammed查询参数

时间:2011-06-14 21:12:51

标签: jax-rs query-parameters

请求可以像服务器一样进入服务器:

http://localhost:8080/App/rest/data/?sort(+Browser)(来自dojo数据网格)

我想抓住?sort(+ Browser)部分。问题是这是关键值,但每次都可能不同(例如,?sort(-username)等)目前,我这样做:

@GET
@Produces( { MediaType.APPLICATION_JSON })
public Response getData(@Context UriInfo ui) throws NamingException {
    MultivaluedMap<String, String> queryParams = ui.getQueryParameters();
    for (Entry<String, List<String>> entry : queryParams.entrySet()){
        if( Pattern.matches("sort.*", entry.getKey()) ){
          //do something with entry.getKey();
       }
    }
...

有没有比使用for循环更好/更简单的方法来获取此查询参数?而不是使用@Context UriInfo ui我认为我可以使用带有正则表达式的QueryParam,类似于

  @GET
  @Produces( { MediaType.APPLICATION_JSON })
    public Response getData(@QueryParam("{sort.*}") String sortStr) throws NamingException { ...}

但是,它看起来不像QueryParam接受任何形式的正则表达式。

我也尝试将名称字段留空,但随后意识到排序(+浏览器)将成为关键,因此将其留空并没有帮助。 谢谢:))

1 个答案:

答案 0 :(得分:1)

也许做最简单的事情 - 直接使用HTTP请求:

public Response getData(@Context HttpServletRequest req) throws NamingException {
  String qParams = req.getQueryString();
  //apply regexp to get needed parameter from qParams
}