2014-07-15 9 views
13

ich ein Jersey basierte Java-Servlet haben:Set Abfrage-Parameter auf einem Jersey-Testanruf

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

ich es in Tomcat nennen kann nur fein wie:

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

Doch meiner JerseyTest, mit Grizzly, es geht nicht richtig mit den Parametern um. Dieser Testfall gibt einen 404-Fehler:

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

Ich vermute, das Problem ist, es den Namen für eine Ressource sucht foo/bar?key=blah anstatt zu versuchen, key=blah auf die Ressource bei foo/bar passieren. Wenn ich nur "foo/bar" an target() übergebe, bekomme ich eine 500, da der Code eine Ausnahme für einen Null-Parameter auslöst.

Ich sah durch die Jersey Testdokumentation, und einige Beispiele, und ich fand einige kryptische suchen Sachen, die für Übergabe von Parametern an einen GET gewesen sein könnte, aber nichts davon sah aus wie es war Werte Parameter zuweisen, so dass ich wasn 't positiv, wie ich es benutzen würde.

Wie kann ich meinen Wert für diesen Parameter übergeben?

Antwort

32

JavaDoc zu WebTarget.queryParam() sollte Ihnen eine Antwort auf Ihr Problem geben. Im Grunde müssen Sie Ihren Code in etwas wie:

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

Nur einen Hinweis: stellen Sie sicher, dass Sie 'queryParam' vor' Anfrage' aufrufen. Die flüssige API wird es danach nicht erlauben. Nahm mich eine Minute. –

+0

Was kann ich für eine Postanfrage verwenden? –

+0

Vielen Dank Lord für uns Stackoverflow –