Jersey JaxRSですべてのクエリパラメータを取得するにはどうすればよいですか?


91

私は汎用のWebサービスを構築しており、後で解析するためにすべてのクエリパラメーターを1つの文字列に取得する必要があります。これどうやってするの?

回答:


163

@QueryParam("name")コンテキストを介して単一のパラメータまたはすべてのパラメータにアクセスできます。

@POST
public Response postSomething(@QueryParam("name") String name, @Context UriInfo uriInfo, String content) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

重要なのは@Context jax-rsアノテーションで、これを使用して以下にアクセスできます。

UriInfo、Request、HttpHeaders、SecurityContext、Providers


GETで使用できますか?
気分がよく、プログラミングを行う

33

リクエストURIの解析されていないクエリ部分は、UriInfoオブジェクトから取得できます。

@GET
public Representation get(@Context UriInfo uriInfo) {
  String query = uriInfo.getRequestUri().getQuery();
  ...
}

4

受け入れられた回答にもう少し追加します。メソッドにパラメーターを追加せずに、次の方法ですべてのクエリパラメーターを取得することもできます。これは、swaggerドキュメントを維持するときに役立つ場合があります。

@Context
private UriInfo uriInfo;

@POST
public Response postSomething(@QueryParam("name") String name) {
     MultivaluedMap<String, String> queryParams = uriInfo.getQueryParameters(); 
     String nameParam = queryParams.getFirst("name");
}

ref


これは機能しますが、お勧めしません。コードを純粋に機能させ続けることができるなら、それを試す必要があります-それはより良いアプローチです。
martyglaubitz

1
厳密に正しいが、私はスーパークラスでこのアプローチを使用して、パラメーターを自動的にログに記録し、非常にうまく機能しています。各リクエストでパラメータを渡す必要があるよりもはるかにクリーンです。実用的なプログラミングがキーボードを制御している間、関数の純粋さが数秒間だけ逆に見える必要がある場合があります:)
Paul Russell
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.