2016-03-28 14 views
0

Say I eine Ressource Dropwizard/Jersey wie so definiert in einem anderen Endpunkt (determineWidgetByFoobaz)?Dropwizard/Jersey Erzwingen zwischen zu Endpunkten hat einen Methodenaufruf machen anstatt ein Netzanruf

Kann das Framework einen Java-Methodenaufruf erstellen? Oder wird ein tatsächlicher Netzwerkanruf (an localhost/loopback/etc.) Gemacht? Wenn ein Netzwerkaufruf durchgeführt wird, bietet das Framework eine Möglichkeit, es so zu konfigurieren, dass stattdessen nur ein lokaler Java-Methodenaufruf aufgerufen wird?

+0

Anstatt Ihre eigene Ruhe-Methode aufzurufen, sollten Sie stattdessen Ihr DAO aufrufen. Oder Sie können eine andere Fassade erstellen, die Ihre Geschäftslogik enthält und an die der REST-Endpunkt delegieren kann. Oder wenn Sie es so machen möchten, würde ich vorschlagen, eine private Methode in Ihrer Endpoint-Klasse zu erstellen, die mit beiden Methoden aufgerufen werden kann. – pandaadb

Antwort

2

Wenn Sie den Endpunkt als Methode (d. H. this.getFizzesByType(type)) aufrufen, wird er wie jede andere Java-Methode aufgerufen. Wenn Sie über einen URI darauf zugreifen (z. B. ClientBuilder.newClient().target("http://localhost/fizz/" + type).request().get()), wird auf sie als Netzwerkressource zugegriffen.

1

Die getFizzesByType Anruf innerhalb determineWidgetByFoobaz ist nur ein weiterer lokaler Methodenaufruf. In diesen Methoden gibt es nichts Besonderes, und Sie können sie auch sicher in einem Unit-Test aufrufen.

Was Jersey beim Bootstrapping-Prozess tut, ist, nach Klassen zu suchen, die mit @Path kommentiert wurden, und dann jede mit einer HTTP-Methode annotierte Methode an ihren Endpunkt (falls vorhanden) zu binden. Auf diese Weise, wenn jemand ein GET auf /fizz feuert, erhält Jersey in kurzer Hand eine FizzResource Instanz, ruft es getFizzesByType Methode, serialisiert das zurückgegebene Objekt zu JSON, erstellt die entsprechende HTTP-Antwort und sendet es zurück an den Client.