泽西岛客户端:如何将列表添加为查询参数
我正在为具有 List as query 参数的 GET 服务创建一个 Jersey 客户端。根据文档,可以将List作为查询参数(此信息也位于@QueryParam javadoc),请查看它:
通常,方法参数的 Java 类型可以:
- 是基元类型;
- 有一个接受单个字符串参数的构造函数;
- 有一个名为 valueOf 或 fromString 的静态方法,它接受单个 String 参数(例如,请参阅 Integer.valueOf(String) 和 java.util.UUID.fromString(String));或
- 是列表,设置或排序集,其中T满足上面的2或3。生成的集合是只读的。
有时,参数可能包含同一名称的多个值。如果是这种情况,则可以使用 4) 中的类型来获取所有值。
但是,我无法弄清楚如何使用 Jersey 客户端添加 List 查询参数。
我了解替代解决方案是:
- 使用 POST 而不是 GET;
- 将列表转换为 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>() {});