我正在为具有List作为查询参数的GET服务创建Jersey客户。根据文档,可以将List作为查询参数(此信息也位于@QueryParam javadoc中),将其检出:
通常,方法参数的Java类型可以: 是原始类型; 有一个接受单个String参数的构造函数; 3. 有一个名为valueOf或fromString的静态方法,该方法接受单个String参数(例如,参见Integer.valueOf(String)和java.util.UUID.fromString(String));要么 是List,Set或SortedSet,其中T满足上面的2或3。结果集合是只读的。 有时参数可能包含多个相同名称的值。如果是这种情况,则可以使用4)中的类型来获取所有值。
通常,方法参数的Java类型可以:
有时参数可能包含多个相同名称的值。如果是这种情况,则可以使用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>() {});
@GET 确实支持字符串列表
@GET
设置 : Java:1.7 Jersey版本:1.9
资源资源
@Path("/v1/test")
子资源 :
// receive List of Strings @GET @Path("/receiveListOfStrings") public Response receiveListOfStrings(@QueryParam("list") final List<String> list){ log.info("receieved list of size="+list.size()); return Response.ok().build(); }
球衣测试用例
@Test public void testReceiveListOfStrings() throws Exception { WebResource webResource = resource(); ClientResponse responseMsg = webResource.path("/v1/test/receiveListOfStrings") .queryParam("list", "one") .queryParam("list", "two") .queryParam("list", "three") .get(ClientResponse.class); Assert.assertEquals(200, responseMsg.getStatus()); }