クエリパラメータとしてリストを持つGETサービス用のJerseyクライアントを作成しています。ドキュメントによると、クエリパラメータとしてリストを持つことが可能です(この情報は@QueryParam javadocにもあります)、それをチェックしてください:
一般に、メソッドパラメータのJavaタイプは次のようになります。
- プリミティブ型であること。
- 単一のString引数を受け入れるコンストラクターがあります。
- 単一のString引数を受け入れるvalueOfまたはfromStringという名前の静的メソッドがあります(たとえば、Integer.valueOf(String)およびjava.util.UUID.fromString(String)を参照)。または
- List、Set、またはSortedSetであり、Tは上記の2または3を満たします。結果のコレクションは読み取り専用です。
パラメータに同じ名前の値が複数含まれている場合があります。この場合、4)のタイプを使用してすべての値を取得できます。
ただし、Jerseyクライアントを使用してリストクエリパラメータを追加する方法がわかりません。
代替ソリューションは次のとおりです。
- GETの代わりにPOSTを使用します。
- リストをJSON文字列に変換し、サービスに渡します。
サービスの適切なHTTP動詞はGETであるため、最初のものは適切ではありません。データ取得操作です。
あなたが私を助けることができないならば、2番目は私のオプションになります。:)
私もサービスを開発しているので、必要に応じて変更する場合があります。
ありがとう!
更新
クライアントコード(jsonを使用)
Client client = Client.create();
WebResource webResource = client.resource(uri.toString());
SearchWrapper sw = new SearchWrapper(termo, pagina, ordenacao, hits, SEARCH_VIEW, navegadores);
MultivaluedMap<String, String> params = new MultivaluedMapImpl();
params.add("user", user.toUpperCase());
params.add("searchWrapperAsJSON", (new Gson()).toJson(sw));
ClientResponse clientResponse = webResource .path("/listar")
.queryParams(params)
.header(HttpHeaders.AUTHORIZATION, AuthenticationHelper.getBasicAuthHeader())
.get(ClientResponse.class);
SearchResultWrapper busca = clientResponse.getEntity(new GenericType<SearchResultWrapper>() {});