433 Stimmen

Unterschied zwischen der Spring @Controller- und @RestController-Annotation

Unterschied zwischen der Spring @Controller und @RestController Annotation.

Kann die @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.

2voto

hi.nitish Punkte 2402

@ RestController wurde seit Spring 4.0.1 bereitgestellt. Diese Controller zeigen an, dass hier @RequestMapping-Methoden standardmäßig @ResponseBody-Semantik annehmen.

In früheren Versionen konnte eine ähnliche Funktionalität durch Verwendung von unten erreicht werden:

  1. @RequestMapping gekoppelt mit @ResponseBody wie @RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }

  2. kann als eine der Möglichkeiten zum Verwenden von JSON mit Jackson oder XML verwendet werden.

  3. MyBean kann definiert werden wie

@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }

  1. @ResponseBody wird hier als die Ansicht unter MVC behandelt und wird direkt weitergeleitet, anstatt von Dispatcher Servlet weitergeleitet zu werden, und die entsprechenden Konverter konvertieren die Antwort in das entsprechende Format wie text/html, application/xml, application/json .

Allerdings ist der Restcontroller bereits mit ResponseBody und den entsprechenden Konvertern gekoppelt. Zudem wird hier, anstatt den Responsebody zu konvertieren, dieser automatisch in die HTTP-Antwort umgewandelt.

0voto

Prashant Goswami Punkte 175
  • @Controller: Diese Annotation ist nur eine spezialisierte Version von @Component und ermöglicht es, dass Controller-Klassen basierend auf dem Klassenpfad-Scanning automatisch erkannt werden.
  • @RestController: Diese Annotation ist eine spezialisierte Version von @Controller, die automatisch die @Controller- und @ResponseBody-Annotationen hinzufügt, sodass wir diese nicht zu unseren Mapping-Methoden hinzufügen müssen.

0voto

KiranKumar Punkte 11

Die @Controller-Annotation gibt an, dass die Klasse ein "Controller" wie ein Web-Controller ist, während die @RestController-Annotation angibt, dass die Klasse ein Controller ist, bei dem die @RequestMapping-Methoden standardmäßig @ResponseBody-Semantik annehmen, d.h. REST-API-Dienste bereitstellen.

-3voto

sambhu Punkte 111

@RestController ist eine Zusammensetzung aus @Controller und @ResponseBody, wenn wir das @ResponseBody nicht in der Methodensignatur verwenden, müssen wir das @Restcontroller verwenden.

-3voto

CoffeeBeanie Punkte 1

Anstelle von @Controller und @ResponseBody ermöglicht es @RestController, in Spring 4.0 und höher REST-APIs freizulegen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X