REST mit Spring 3
Spring 3 wird mit vielen neuen Features aufwarten.
REST (Representational State Transfer) ist ein Bereich, bei dem man in der jetzigen Entwicklungssstand bereits einiges zu sehen ist.
Vorab: Spring 3.0 wird Java 5 voraussetzen, da JDK 1.4 mittlerweile das Ende seines Lebenszyklus erreicht hat. Außerdem werden die alten Spring-MVC-Controller (SimpleFormController, MultiActionController) deprecated, da mit @Controller und @RequestMapping in Spring 2.5 ein deutlich eleganterer Weg vorgestellt wurde.
Dadurch ergibt sich, dass auch der REST-Support mit Annotationen funktionieren sollte. Hier ein Beispiel:
@RequestMapping(value = "/kunden/{id}",
method = { RequestMethod.GET })
public ModelAndView getById(@PathVariable("id") int id) {
Kunde kunde = kundeDAO.getByID(id);
return new ModelAndView("kunde", "kunde", kunde);
}
Die grundlegende Idee von REST ist, dass man eine URL wie http://server/kunden/42 hat, an die man dann Anfragen stellen kann wie zum Beispiel ein HTTP GET um die Daten des Kunden zu holen oder ein HTTP DELETE zum Löschen. Wie man sieht, kann man für diese Funktionalität in Spring 3.0 nun in @RequestMapping ein URI-Template angeben. Dort sind bestimmte Stellen angegeben, die an Variablen gebunden werden können. Im Beispiel also {id}. Der Wert kann dann an einen Paramter der Methode mit der @PathVariable-Annotation gebunden werden.
Die unterschiedlichen HTTP-Aktionen wie GET, POST, DELETE usw. werden – wie im Listing gezeigt – ebenfalls unterstützt. Weitere (zukünftige) Themen im REST-Support sind:
- Die Unterstützung von XML, JSON usw., um Daten zu übertragen. Die Nutzung von HTML ist jetzt schon möglich.
- Unterstützung für ETags, um die Datenübertragung für Daten, die sich nicht geändert haben, zu eliminieren.
- Atom und RSS als Views.
Wen die Details interessieren: In Spring 3.0M1 (auf das sich dieses Posting bezieht) ist das Petclinic-Beispiel bereits vollständig zu REST konvertiert. Das bietet schon einen guten Eindruck, was man mit REST und Spring alles machen kann.