Unterschied zwischen Feder @Controller
und @RestController
Anmerkung.
Kann @Controller
Annotation sowohl für Web MVC- als auch für REST-Anwendungen verwendet werden?
Wenn ja, wie können wir unterscheiden, ob es sich um eine Web-MVC- oder eine REST-Anwendung handelt?
java
spring
spring-mvc
Srikanth
quelle
quelle
Thymeleaf
es wird nicht mit der Arbeit@RestController
wegen@ResponseBody
der in dieser Anmerkung enthielt.@ResponseBody
macht die zurückgegebenen Objekte zu etwas, das im Körper sein könnte, zB JSON oder XML ( Quelle )Im folgenden Code zeige ich Ihnen den Unterschied zwischen
@controller
und
@RestController
Das
@ResponseBody
ist standardmäßig aktiviert. Sie müssen es nicht über der Funktionssignatur hinzufügen.quelle
Wenn Sie verwenden
@RestController
, können Sie keine Ansicht zurückgeben (mithilfeViewresolver
von Spring / Springboot), und@ResponseBody
in diesem Fall wird Ja nicht benötigt.Wenn Sie verwenden
@Controller
, können Sie eine Ansicht in Spring Web MVC zurückgeben.quelle
@RestController
Annotierte Klassen sind die gleichen wie,@Controller
aber die@ResponseBody
On-Handler-Methoden sind impliziert.quelle
Seien Sie vorsichtig - sie sind nicht genau gleich.
Wenn Sie in Ihrer Anwendung Interceptors definieren, gelten diese nicht für mit Anmerkungen versehene Controller
@RestController
, sie funktionieren jedoch mit mit@Controller
Anmerkungen versehenen Controllern.dh. Konfiguration für den Interceptor:
und in der Deklaration eines Federreglers:
Wird jedoch funktionieren
endet nicht damit, dass der Abfangjäger damit verbunden ist.
quelle
@RestController
wurde im Frühjahr 4x eingeführt. Diese Annotation wird auch selbst mit Annotationen versehen.@Controller
Wenn sie nicht wie eine funktioniert,@Controller
melden Sie dies als Fehler.Interceptor
mit einem verknüpfen@RestController
.Interceptor
an eine angehängt@RestController
.Wie Sie in der Spring-Dokumentation ( Spring RestController-Dokumentation ) sehen können, entspricht die Rest Controller-Annotation der Controller-Annotation, setzt jedoch voraus, dass @ResponseBody standardmäßig aktiv ist, sodass alle JSON-Dateien in Java-Objekte analysiert werden.
quelle
Die neue Annotation @RestController in Spring4 +, die die Klasse als Controller kennzeichnet, bei der jede Methode ein Domänenobjekt anstelle einer Ansicht zurückgibt. Es ist eine Abkürzung für @Controller und @ResponseBody.
quelle
@RestController
wurde seit Frühjahr 4.0.1 zur Verfügung gestellt. Diese Controller geben an, dass hier @ RequestMapping-Methoden standardmäßig die @ ResponseBody-Semantik annehmen.In früheren Versionen konnte die ähnliche Funktionalität erreicht werden, indem Folgendes verwendet wurde:
@RequestMapping
gekoppelt mit@ResponseBody
wie@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }
<mvc:annotation-driven/>
kann als eine der Möglichkeiten zur Verwendung von JSON mit Jackson oder XML verwendet werden.@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }
@ResponseBody
wird hier unter MVC als Ansicht behandelt und direkt versendet, anstatt vom Dispatcher-Servlet versendet zu werden, und die jeweiligen Konverter konvertieren die Antwort in das zugehörige Format wie Text / HTML, Anwendung / XML, Anwendung / JSON.Der Restcontroller ist jedoch bereits mit ResponseBody und den jeweiligen Konvertern gekoppelt. Zweitens wird hier der Antwortkörper automatisch konvertiert, anstatt ihn zu konvertieren.
quelle
@Controller
kehrt zurückView
.@RestController
kehrt zurückResponseBody
.quelle
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.
quelle
@Controller
: Diese Annotation ist nur eine spezielle Version von@Component
und ermöglicht die automatische Erkennung der Controller-Klassen basierend auf dem Scannen von Klassenpfaden.@RestController
: Diese Annotation ist eine spezielle Version,@Controller
die automatisch hinzugefügt@Controller
und@ResponseBody
kommentiert wird, sodass wir@ResponseBody
unsere Mapping-Methoden nicht ergänzen müssen.quelle
@Controller wird in Legacy-Systemen verwendet, die JSPs verwenden. Es kann Ansichten zurückgeben. @RestController markiert, dass der Controller REST-Services mit dem JSON-Antworttyp bereitstellt. Daher werden die Annotationen @Controller und @ResponseBody zusammengeführt.
quelle
@RestController
ist die Zusammensetzung von@Controller
und@ResponseBody
, wenn wir die@ResponseBody
In-Method-Signatur nicht verwenden, müssen wir die verwenden@Restcontroller
.quelle
Anstatt @Controller und @ResponseBody zu verwenden, können Sie mit @RestController Rest-APIs in Spring 4.0 und höher verfügbar machen.
quelle