在Jersey测试调用中设置查询参数

19

我有一个基于Jersey的Java servlet:

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

我可以在Tomcat中轻松地调用它,如下所示:

http://localhost:8080/container/foo/bar?key=blah

然而,在我的JerseyTest中,使用Grizzly时,它无法正确处理参数。这个测试用例返回了一个404错误:

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

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

我查看了Jersey测试文档和一些示例,发现了一些神秘的东西,可能用于传递GET请求的参数,但其中没有一个看起来像是给参数赋值,所以我不确定该如何使用它。

如何为该参数传递我的值?

1个回答

44

使用 WebTarget.queryParam() 的 JavaDoc 可以为您解决问题。基本上,您需要将您的代码转换为以下形式:

target("foo/bar").queryParam("key", "blah").request().get()

2
只是一个提示:确保在request之前调用queryParam。流畅的API之后将不允许这样做。我花了一分钟才弄明白。 - Tim Büthe
我可以用什么进行POST请求? - Md. Tahmid Mozaffar
2
如何添加多个参数和多个键? - user1735921

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接