получить необязательный параметр запроса в jax-rs - PullRequest
2 голосов
/ 15 июня 2011

Запросы могут поступать на сервер, например:

http://localhost:8080/App/rest/data/?sort(+Browser) (из сетки данных dojo)

Я хочу получить сортировку ? (+ Браузер) часть.Проблема в том, что это значение ключа, но оно может каждый раз меняться (например,? 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 принимает любую форму регулярного выражения.

Iтакже попытался оставить поле имени пустым, но затем понял, что сортировка (+ Browser) будет ключом, поэтому оставить его пустым не помогло.Спасибо:)

1 Ответ

1 голос
/ 10 апреля 2012

Может быть, сделать самое простое - использовать HTTP-запрос напрямую:

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