我正在为具有 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>() {});