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

时间:2015-03-23 18:20:50

标签: unit-testing jersey jax-rs jersey-2.0 jersey-client

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

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

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

如果我将Queryparam作为post param测试工作,但我不想使用POST来检索数据。

由于公司政策,我无法发布原始代码。

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

1 个答案:

答案 0 :(得分:2)

更简单的解决方案是更换' +'由'%20'建议herehere

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