gpt4 book ai didi

java - 泽西客户端 : How to add a list as query parameter

转载 作者:IT老高 更新时间:2023-10-28 11:52:08 77 4
gpt4 key购买 nike

我正在为具有 List 作为查询参数的 GET 服务创建 Jersey 客户端。根据documentation ,可以将 List 作为查询参数(此信息也在 @QueryParam javadoc 中),请查看:

In general the Java type of the method parameter may:

  1. Be a primitive type;
  2. Have a constructor that accepts a single String argument;
  3. Have a static method named valueOf or fromString that accepts a single String argument (see, for example, Integer.valueOf(String) and java.util.UUID.fromString(String)); or
  4. Be List, Set or SortedSet, where T satisfies 2 or 3 above. The resulting collection is read-only.

Sometimes parameters may contain more than one value for the same name. If this is the case then types in 4) may be used to obtain all values.

但是,我不知道如何使用 Jersey 客户端添加列表查询参数。

我了解替代解决方案是:

  1. 使用 POST 代替 GET;
  2. 将 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>() {});

最佳答案

@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();
}

Jersey 测试用例

@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());
}

关于java - 泽西客户端 : How to add a list as query parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13750010/

77 4 0