Die Anmerkungen zu Spring @Controller und @RestController
1. Überblick
In diesem kurzen Tutorial werden wir den Unterschied zwischen den Anmerkungen@Controller und@RestControllerin Spring MVC erläutern.
Die erste Annotation wird für herkömmliche Spring-Controller verwendet und ist seit langer Zeit Teil des Frameworks.
Die Annotation@RestController wurde im Frühjahr 4.0 eingeführt, um die Erstellung von RESTful-Webdiensten zu vereinfachen. It’s a convenience annotation that combines @Controller and @ResponseBody - wodurch die Notwendigkeit entfällt, jede Anforderungsbehandlungsmethode der Controller-Klasse mit der Annotation@ResponseBody zu versehen.
Weitere Lektüre:
Spring RequestMapping
Spring @RequestMapping - Grundlegendes Beispiel, @RequestParam, @PathVariable, Header-Zuordnung
Spring @RequestParam Annotation
Eine detaillierte Anleitung zur @ RequestParam-Annotation von Spring
2. Feder MVC@Controller
Klassische Controller können mit der Annotation@Controllerversehen werden. Dies ist lediglich eine Spezialisierung der Klasse@Componentund ermöglicht die automatische Erkennung von Implementierungsklassen durch das Scannen von Klassenpfaden.
@Controller wird normalerweise in Kombination mit einer@RequestMapping-Annotation verwendet, die bei Anforderungsbearbeitungsmethoden 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 ist mit@ResponseBody versehen. Diese Annotation ermöglicht die automatische Serialisierung des Rückgabeobjekts inHttpResponse.
3. Feder MVC@RestController
@RestController ist eine spezielle Version des Controllers. Es enthält die Anmerkungen@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 Rückgabeobjekte automatisch inHttpResponse.
4. Fazit
In diesem Artikel haben wir die klassischen und spezialisierten REST-Controller vorgestellt, die im Spring Framework verfügbar sind.
Der vollständige Quellcode für das Beispiel ist inthe GitHub project verfügbar. Dies ist ein Maven-Projekt, daher kann es importiert und unverändert verwendet werden.