1. Übersicht
In diesem kurzen Tutorial werden wir den Unterschied zwischen den Annotationen @Controller und @RestController in Spring MVC erläutern .
Die erste Anmerkung wird für herkömmliche Federregler verwendet und ist seit sehr langer Zeit Teil des Frameworks.
Die Annotation @RestController wurde im Frühjahr 4.0 eingeführt, um die Erstellung von RESTful-Webdiensten zu vereinfachen. Es handelt sich um eine praktische Annotation, die @Controller und @ResponseBody kombiniert. Dadurch entfällt die Notwendigkeit, jede Anforderungsbehandlungsmethode der Controller-Klasse mit der Annotation @ResponseBody zu kommentieren .
2. Spring MVC @Controller
Klassische Controller können mit der Annotation @Controller kommentiert werden . Dies ist lediglich eine Spezialisierung der @ Component- Klasse und ermöglicht die automatische Erkennung von Implementierungsklassen über das Scannen von Klassenpfaden.
@Controller wird normalerweise in Kombination mit einer @ RequestMapping- Annotation verwendet, die für Anforderungsbehandlungsmethoden verwendet wird.
Sehen wir uns ein kurzes Beispiel für den Spring MVC-Controller an:
@Controller @RequestMapping("books") public class SimpleBookController { @GetMapping("/{id}", produces = "application/json") public @ResponseBody Book getBook(@PathVariable int id) { return findBookById(id); } private Book findBookById(int id) { // ... } }
Die Anforderungsbehandlungsmethode wird mit @ResponseBody kommentiert . Diese Annotation ermöglicht die automatische Serialisierung des Rückgabeobjekts in die HttpResponse .
3. Spring MVC @RestController
@RestController ist eine spezielle Version des Controllers. Es enthält die Annotationen @Controller und @ResponseBody und vereinfacht daher die Controller-Implementierung:
@RestController @RequestMapping("books-rest") public class SimpleBookRestController { @GetMapping("/{id}", produces = "application/json") public Book getBook(@PathVariable int id) { return findBookById(id); } private Book findBookById(int id) { // ... } }
Der Controller ist mit der Annotation @RestController versehen , daher ist @ResponseBody nicht erforderlich.
Jede Anforderungsbehandlungsmethode der Controller-Klasse serialisiert automatisch zurückgegebene Objekte in HttpResponse .
4. Fazit
In diesem Artikel haben wir die klassischen und spezialisierten REST-Controller gesehen, die im Spring Framework verfügbar sind.
Der vollständige Quellcode für das Beispiel ist im GitHub-Projekt verfügbar. Dies ist ein Maven-Projekt, daher kann es importiert und unverändert verwendet werden.