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.

557voto

micha Punkte 45016
  • @Controller wird verwendet, um Klassen als Spring MVC Controller zu markieren.
  • @RestController ist eine Bequemlichkeitsannotation, die nichts anderes tut, als die Annotationen @Controller und @ResponseBody hinzuzufügen (siehe: Javadoc)

Also sollten die folgenden beiden Controller-Definitionen dasselbe tun

@Controller
@ResponseBody
public class MyController { }

@RestController
public class MyRestController { }

89voto

Im folgenden Code zeige ich Ihnen den Unterschied zwischen @Controller

@Controller
public class RestClassName{

  @RequestMapping(value={"/uri"})
  @ResponseBody
  public ObjectResponse functionRestName(){
      //...
      return instance;
   }
}

und @RestController

@RestController
public class RestClassName{

  @RequestMapping(value={"/uri"})
  public ObjectResponse functionRestName(){
      //...
      return instance;
   }
}

das @ResponseBody ist standardmäßig aktiviert. Sie müssen es nicht über der Funktions-Signatur hinzufügen.

49voto

@RestController ist die Kombination aus @Controller und @ResponseBody.

Fluss der Anfrage in einer @Controller-Klasse ohne Verwendung einer @ResponseBody-Annotation:

Bildbeschreibung hier eingeben

@RestController gibt ein Objekt als Antwort zurück, anstelle einer Ansicht.

Bildbeschreibung hier eingeben

38voto

Ravi Wadje Punkte 1025

Wenn Sie @RestController verwenden, können Sie keine Ansicht zurückgeben (indem Sie ViewResolver in Spring / springboot verwenden) und ja, @ResponseBody ist in diesem Fall nicht erforderlich.

Wenn Sie @Controller verwenden, können Sie eine Ansicht im Spring Web MVC zurückgeben.

25voto

Bart Punkte 16742

@RestController annotierte Klassen sind dasselbe wie @Controller, aber das @ResponseBody auf den Handler-Methoden sind impliziert.

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