我正在使用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的.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);

Java相关问答推荐

Intellij显示项目语言级别最高为12,尽管有java版本17 SDK

确定Java中Math.Ranb()输出的上限

使用Testcontainers与OpenLiberty Server进行集成测试会抛出SocketException

不推荐使用的Environment.getExternalStorageDirectory().getAbsolutePath()返回的值不同于新的getExternalFilesDir(空)?

CompleteableFuture是否运行在不同的内核上?

Java ArrayList的整数和数组的泛型

声明带有泛型的函数以用作查找映射中的值

Java页面筛选器问题

JavaFX:无论何时显示应用程序,如何更改组件/ node 位置?

在打开搜索结果时,如何让Eclipse打开整个文件?

为什么创建Java动态代理需要接口参数

JPA无手术同品种器械可能吗?

在Spring Boot中使用咖啡因进行缓存-根据输出控制缓存

如何在Spring Boot Auth服务器上正确配置CORS?

从字节数组切换到JakartaMail org.springframework.mail.javamail.JavaMailSender InputStreamResource

Java返回生成器的实现

为什么Java编译器为没有参数的方法(getter方法)创建桥接方法

找不到 jar 文件系统提供程序try 使用 jdeps 和 jlink 创建收缩 Java 映像来运行 Minecraft

仅允许使用 Spring Boot 3 从本地主机

无法转换 [Ljava.lang.Object;将 Object[] 传递给 Object... 可变参数