Die Spring @Controller- und @RestController-Anmerkungen

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

Read more

Spring @RequestParam Annotation

Eine detaillierte Anleitung zur @ RequestParam-Annotation von Spring

Read more

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.