2

リクエストは次のようにサーバーに送信されます。

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 が任意の形式の正規表現を受け入れるようには見えません。

名前フィールドも空白のままにしてみましたが、ソート(+ブラウザ)がキーになることに気付いたので、空白のままにしても役に立ちませんでした。ありがとう :)

4

1 に答える 1

1

おそらく最も簡単なことを行う - HTTP リクエストを直接使用する:

public Response getData(@Context HttpServletRequest req) throws NamingException {
  String qParams = req.getQueryString();
  //apply regexp to get needed parameter from qParams
}
于 2012-04-10T16:58:10.560 に答える