First page Back Continue Last page Overview Text

Notes:


Und hier nun der eigentliche REST-Webservice. In diesem Beispiel handelt es sich um einen Webservice für den Zugriff auf eine Filmdatenbank. Er bietet daher verschiedene Methoden zum Abruf einer Liste aller Filme sowie der Details zu einem Film. Auf der nächsten Folie gibt es noch eine Methode, mit der ein neuer Film in der Datenbank angelegt werden kann.

Auch hier handelt es sich wieder um eine „Stateless Session Bean“ (zu erkennen an der @Stateless-Annotation), damit die Klasse in einem Webcontainer deployed werden kann. Dank der Annotation @Path vor der Klasse weiß der Webcontainer, dass es sich um einen REST-Webservice handelt und dass die Basis-URL um den Zusatz „/Film“ erweitert werden soll.

Wie Sie wissen, basiert REST auf der Idee, einzelne „Ressourcen“ anzubieten, die mit den Anfrageverben des HTTP-Protokolls (GET, PUT, POST und DELETE) abgerufen oder bearbeitet werden können. Deshalb muss vor jeder Webservice-Methode entweder @GET, @PUT, @POST oder @DELETE stehen, damit klar ist, in welchem Fall sie aufgerufen wird. Zusätzlich kann (muss aber nicht) vor einer Methode ebenfalls die @Path-Annotation stehen, um die URL, auf die sie sich bezieht, weiter einzuschränken.

Im obigen Beispiel sehen Sie zwei Methoden, die jeweils bei einer GET-Anfrage aufgerufen werden. Die erste Methode reagiert auf die URL /Film und liefert eine Liste aller Filme. Die andere Methode reagiert zum Beispiel auf /Film/0815 und liefert dann die Details zum Film mit der ID 0815 zurück. Unterschieden wird dies anhand der @Path-Annotation vor der zweiten Methode, wobei hier mit {id} ein Platzhalter für die ID definiert wird. Passend zu diesem Platzhalter wird daher ein Methodenparameter mit @PathParam("id") ausgezeichnet, damit der Wert aus der URL an diesen Parameter übergeben wird.

Die Annotationen @Produces(MediaType.APPLICATION_JSON) legt fest, dass beide Methoden einen JSON-String als Antwort liefern. Man hätte stattdessen auch @Produces("application/json") schreiben können. Übrigens ist es kein Problem, wenn zwei Methoden auf dasselbe HTTP-Verb und dieselbe URL reagieren, sofern sie unterschiedliche Antwortformate (z.B. JSON und XML) zurückliefern. Denn beim Aufruf des Webservices signalisiert der Client durch das HTTP Header Field accept, welches Datenformat er erwartet und somit welche Methode aufgerufen werden soll.