在Jersey测试呼叫上设置查询参数

kwi*_*ver 13 java jersey grizzly jersey-2.0

我有一个基于Jersey的Java servlet:

@Path("foo")
class Foo {
  @GET
  @Path("bar")
  public Response bar(@QueryParam("key") String value) {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我可以在Tomcat中称它为:

http://localhost:8080/container/foo/bar?key=blah
Run Code Online (Sandbox Code Playgroud)

但是,在我的JerseyTest中,使用Grizzly,它没有正确处理参数.此测试用例返回404错误:

@Test
public void testBar() {
  final Response response = target("foo/bar?key=blah").request().get();
}
Run Code Online (Sandbox Code Playgroud)

我怀疑问题是它正在寻找一个名为资源foo/bar?key=blah而不是试图传递key=blah给资源的资源foo/bar.如果我只是传递"foo/bar"target(),我得到一个500,因为代码抛出一个null参数的异常.

我查看了Jersey测试文档,以及一些示例,我发现了一些可能用于将参数传递给GET的神秘内容,但没有一个看起来像是为参数赋值,所以我并不积极如何我会用它.

如何将该值传递给该参数?

Mic*_*dos 36

JavaDoc到WebTarget.queryParam()应该为您提供问题的答案.基本上你需要将代码转换为:

target("foo/bar").queryParam("key", "blah").request().get()
Run Code Online (Sandbox Code Playgroud)

  • 只是一个提示:确保在“request”之前调用“queryParam”。之后流畅的 API 将不允许这样做。花了我一分钟。 (2认同)
  • 感谢主给我们 Stackoverflow (2认同)
  • 如何添加多个参数多个键? (2认同)