Die Anmerkungen zu Spring @Controller und @RestController

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.