在使用Javax WebTarget客户端发送HTTPS请求时,如何避免编码包含“:”的查询参数。

发布于 2025-01-20 05:43:44 字数 1798 浏览 0 评论 0原文

我正在使用WebTarget发送带有查询参数的GET请求。

这是我需要生成的预期请求:

{{host}}/svc/lookupservice/v2/findItems?filter=creationdate:[2020-05-01T00:08:17.000Z..]&limit=25&offset=0&userType=seller&userid=11234567

但是使用WebTarget如下:

import javax.ws.rs.client.Client;
...
...
class A {
    private Client client;

  public void apiCall(String userId, String startDate, String endDate) {
    String endpoint = (String)this.client.getConfiguration().getProperty("jaxrs.client.endpointuri");
    WebTarget webTarget = this.client.target(endpoint).path("/lookupservice/v2/findItems")
              .queryParam("userType", new Object[]{"seller"})
              .queryParam("sort", new Object[]{"creationdate"})
              .queryParam("limit", new Object[]{150})
              .queryParam("offset", new Object[]{0})
              .queryParam("filter", new Object[]{"creationdate:[" + startDate + ".." + endDate + "]"})
              .queryParam("userid", new Object[]{userId});

...
}

...
}

class B {

   main(..) {
      Date endDate = new Date();
      Date startDate = new Date(endDate.getTime() - Duration.ofDays(30).toMillis());
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());

      sDate = formatter.format(startDate);
      eDate = formatter.format(endDate);

      new A().apiCall(userId, sDate, eDate);

  }
      

}

上面的WebTarget URL

JerseyWebTarget { https://svc1.abc.qa.def.com/svc/lookupservice/v2/findItems?userType=seller&sort=creationdate&limit=150&offset=0&filter=creationdate%3A%5B2022-03-08T15%3A26%3A35.951Z..2022-04-07T16%3A26%3A35.951Z%5D&userid=1005732584 }

在创建日期中编码时生成了WebTarget URL。

我该如何避免它?

I am using WebTarget to send a GET request with query params.

This is my expected request that I need to generate:

{{host}}/svc/lookupservice/v2/findItems?filter=creationdate:[2020-05-01T00:08:17.000Z..]&limit=25&offset=0&userType=seller&userid=11234567

But using webtarget as follows:

import javax.ws.rs.client.Client;
...
...
class A {
    private Client client;

  public void apiCall(String userId, String startDate, String endDate) {
    String endpoint = (String)this.client.getConfiguration().getProperty("jaxrs.client.endpointuri");
    WebTarget webTarget = this.client.target(endpoint).path("/lookupservice/v2/findItems")
              .queryParam("userType", new Object[]{"seller"})
              .queryParam("sort", new Object[]{"creationdate"})
              .queryParam("limit", new Object[]{150})
              .queryParam("offset", new Object[]{0})
              .queryParam("filter", new Object[]{"creationdate:[" + startDate + ".." + endDate + "]"})
              .queryParam("userid", new Object[]{userId});

...
}

...
}

class B {

   main(..) {
      Date endDate = new Date();
      Date startDate = new Date(endDate.getTime() - Duration.ofDays(30).toMillis());
      SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.getDefault());

      sDate = formatter.format(startDate);
      eDate = formatter.format(endDate);

      new A().apiCall(userId, sDate, eDate);

  }
      

}

And this above generates webTarget url as

JerseyWebTarget { https://svc1.abc.qa.def.com/svc/lookupservice/v2/findItems?userType=seller&sort=creationdate&limit=150&offset=0&filter=creationdate%3A%5B2022-03-08T15%3A26%3A35.951Z..2022-04-07T16%3A26%3A35.951Z%5D&userid=1005732584 }

It encodes :[ in creation date.

How can I avoid it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

猫弦 2025-01-27 05:43:44

通过不使用WebTarget的.queryparams()而不是通过查询传递URI来弄清楚。

String query = "?userType=seller&limit=25&offset=0&userid=" + userId + "&filter=creationdate:[" + startDate + ".." + endDate + "]";

URI uri = URI.create(endpoint + "/lookupservice/v2/findItems"+ query);

WebTarget webTarget = client.target(uri);

Figured out by not using webTarget's .queryParams() and instead passing URI with query.

String query = "?userType=seller&limit=25&offset=0&userid=" + userId + "&filter=creationdate:[" + startDate + ".." + endDate + "]";

URI uri = URI.create(endpoint + "/lookupservice/v2/findItems"+ query);

WebTarget webTarget = client.target(uri);

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文