我正在为一个 GET 服务创建一个 Jersey 客户端,该服务将 List 作为查询参数。根据 文件,可以有一个 List 作为查询参数(这个信息也在 @ QueryParam javadoc 中) ,检查一下:
一般来说,方法参数的 Java 类型可以:
- 是原始类型;
- 有一个接受单个 String 参数的构造函数;
- 有一个名为 valueOf 或 FROM String 的静态方法,该方法接受单个 String 参数(例如,参见 Integer.valueOf (String)和 java.util.UUID.FROM String (String)) ; 或者
- Be List,Set 或 SortedSet,其中 T 满足上面的2或3。
有时参数可能包含同一名称的多个值。如果是这种情况,那么可以使用4中的类型来获得所有值。
但是,我不知道如何使用 Jersey 客户机添加 List 查询参数。
据我所知,替代解决方案包括:
第一个不好,因为服务的合适 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>() {});