我正在为具有List作为查询参数的GET服务创建Jersey客户。根据文档,可以将List作为查询参数(此信息也位于@QueryParam javadoc中),将其检出:
通常,方法参数的Java类型可以:
- 是原始类型;
- 有一个接受单个String参数的构造函数;
- 有一个名为valueOf或fromString的静态方法,该方法接受单个String参数(例如,请参见Integer.valueOf(String)和java.util.UUID.fromString(String));要么
- 是List,Set或SortedSet,其中T满足上面的2或3。结果集合为只读。
有时参数可能包含多个相同名称的值。如果是这种情况,则可以使用4)中的类型来获取所有值。
但是,我不知道如何使用Jersey客户端添加List查询参数。
我了解替代解决方案是:
- 使用POST而不是GET;
- 将List转换为JSON字符串,并将其传递给服务。
第一个不好,因为该服务的正确HTTP动词是GET。这是一个数据检索操作。
如果您不能帮我,第二个将是我的选择。:)
我也在开发服务,因此我可以根据需要进行更改。
谢谢!
更新资料
客户端代码(使用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>() {});