如何在单元测试中使用 Jersey 客户端发送带有 JSON 值的 Queryparam

How to send Queryparam with JSON value using Jersey client in unit test

我正在尝试使用 Jersey 提供的 InMemory 容器为 jersey 资源编写测试用例。

由于我的服务方法包含许多多值参数作为过滤器,我选择将所有这些值作为单个 JSON 参数发送,这样可以很容易地为每个过滤器发送值列表。

当我使用 target("path").queryParam("filters", jsonString).request().get(); 发送 JSON 字符串时,调用失败死于 Jersey 客户端内部查询构建器,它正在解析 url 并检查 url。由于 url 包含我的 JSON 和其中的“{”,它们被解释为路径参数。 如果我尝试使用 URLEncode.encode(jsonStr, "UTF-8") 对 JSON 进行编码,则路径参数模板问题已解决,但 JSON 中的空格作为球衣客户端编码 URL 被服务器接收为“+” ] 又一次,但服务器只解码了一次。

如果我将 Queryparam 作为 post 参数测试正在运行,但我不想使用 POST 来检索数据。

由于公司政策,我不能post原始代码。

我的问题是,有没有办法通过设置自定义构建器来禁用 jersey clieny 中的路径模板检查。

一个更简单的解决方案是按照建议将“+”替换为“%20”here and here:

URLEncode.encode(jsonStr, "UTF-8").replaceAll("\+", "%20");