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.

16voto

bertybro Punkte 472

Eigentlich Vorsicht - sie sind nicht genau gleich.

Wenn Sie innerhalb Ihrer Anwendung irgendwelche Interceptors definieren, gelten sie nicht für Controller, die mit @RestController annotiert sind, sie funktionieren jedoch mit Controllern, die mit @Controller annotiert sind.

d.h. Konfiguration für den Interceptor:

@Configuration
public class WebMvcConfiguration extends WebMvcConfigurerAdapter {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new TemplateMappingInterceptor()).addPathPatterns("/**", "/admin-functions**").excludePathPatterns("/login**");
    }

}

und in der Deklaration eines Spring Controllers:

@Controller
public class AdminServiceController {...

Wird funktionieren, jedoch

@RestController
public class AdminServiceController {...

hat nicht den Interceptor mit ihm verbunden zu werden.

13voto

G.Brown Punkte 319

@Controller gibt View zurück. @RestController gibt ResponseBody zurück.

11voto

Albert Casanovas Punkte 254

Wie Sie in der Spring-Dokumentation sehen können (Spring RestController-Dokumentation), ist die RestController-Annotation die gleiche wie die Controller-Annotation, aber unter der Annahme, dass @ResponseBody standardmäßig aktiv ist, so dass alle Java-Objekte zur JSON-Repräsentation im Antwortkörper serialisiert werden.

5voto

yancy Punkte 59

Die neue @RestController-Annotation in Spring4+, die die Klasse als Controller kennzeichnet, in der jede Methode ein Domänenobjekt anstelle einer Ansicht zurückgibt. Es ist eine Kurzform für @Controller und @ResponseBody zusammengefasst.

3voto

Tharindu Eranga Punkte 137

@Controller wird in Legacy-Systemen verwendet, die JSPs verwenden. Es kann Ansichten zurückgeben. @RestController dient dazu, den Controller als REST-Services mit JSON-Antworttyp zu kennzeichnen. Es kombiniert also die Annotationen @Controller und @ResponseBody zusammen.

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