Różnica między wiosną @Controller
a @RestController
adnotacją.
Czy @Controller
adnotacji można używać zarówno w aplikacjach Web MVC, jak i REST?
Jeśli tak, w jaki sposób możemy rozróżnić, czy jest to aplikacja Web MVC czy REST.
java
spring
spring-mvc
Srikanth
źródło
źródło
Thymeleaf
ten nie będzie działał z@RestController
powodu tego@ResponseBody
zawartego w tej adnotacji.@ResponseBody
sprawia, że zwrócone obiekty stają się czymś, co może znajdować się w ciele, np. JSON lub XML ( źródło )W poniższym kodzie pokażę różnicę między
@controller
i
@RestController
@ResponseBody
jest włączona domyślnie. Nie musisz dodawać go powyżej podpisu funkcji.źródło
Jeśli używasz
@RestController
, nie możesz zwrócić widoku (używającViewresolver
Spring / Springboot) i tak@ResponseBody
nie jest potrzebne w tym przypadku.Jeśli używasz
@Controller
, możesz zwrócić widok w Spring web MVC.źródło
@RestController
adnotacją zajęcia są takie same jak@Controller
ale@ResponseBody
o metod obsługi są regulowane.źródło
Właściwie uważaj - nie są dokładnie takie same.
Jeśli zdefiniujesz jakieś przechwytywacze w swojej aplikacji, nie będą one miały zastosowania do kontrolerów z adnotacjami
@RestController
, ponieważ działają one jednak z@Controller
kontrolerami z adnotacjami.to znaczy. konfiguracja przechwytywacza:
oraz w deklaracji kontrolera wiosennego:
Będzie jednak działać
nie ma z nim skojarzonego przechwytywacza.
źródło
@RestController
został wprowadzony wiosną 4x. Ta adnotacja również jest opatrzona adnotacją,@Controller
więc jeśli nie działa jak@Controller
wtedy, zgłoś to jako błąd.Interceptor
z@RestController
.Interceptor
do@RestController
.Jak widać w dokumentacji Spring (dokumentacja Spring RestController ) Odpoczynek Adnotacja kontrolera jest taka sama jak adnotacja kontrolera, ale przy założeniu, że @ResponseBody jest domyślnie aktywny, więc wszystkie pliki JSON są analizowane do obiektów Java.
źródło
Nowa adnotacja @RestController w Spring4 +, która oznacza klasę jako kontroler, w którym każda metoda zwraca obiekt domeny zamiast widoku. To skrót dla @Controller i @ResponseBody zwinięte razem.
źródło
@RestController
był dostarczany od wiosny 4.0.1. Kontrolery te wskazują, że tutaj metody @RequestMapping domyślnie przyjmują semantykę @ResponseBody.We wcześniejszych wersjach podobną funkcjonalność można było uzyskać, stosując poniższe:
@RequestMapping
w połączeniu z@ResponseBody
podobnymi@RequestMapping(value = "/abc", method = RequestMethod.GET, produces ="application/xml") public @ResponseBody MyBean fetch(){ return new MyBean("hi") }
<mvc:annotation-driven/>
może być używany jako jeden ze sposobów używania JSON z Jacksonem lub XML.@XmlRootElement(name = "MyBean") @XmlType(propOrder = {"field2", "field1"}) public class MyBean{ field1 field2 .. //getter, setter }
@ResponseBody
jest tutaj traktowany jako widok między MVC i jest wysyłany bezpośrednio zamiast wysyłany z serwletu Dispatchera, a odpowiednie konwertery konwertują odpowiedź w odpowiednim formacie, takim jak tekst / html, application / xml, application / json.Jednak Restcontroller jest już połączony z ResponseBody i odpowiednimi konwerterami. Po drugie, ponieważ zamiast konwertować odpowiedź, jest ona automatycznie konwertowana na odpowiedź HTTP.
źródło
@Controller
zwracaView
.@RestController
zwracaResponseBody
.źródło
Adnotacja @RestController została wprowadzona wiosną 4.0, aby uprościć tworzenie usług sieciowych RESTful. To wygodna adnotacja, która łączy @Controller i @ResponseBody - co eliminuje potrzebę adnotacji każdej metody obsługi żądań klasy kontrolera za pomocą adnotacji @ResponseBody.
źródło
@Controller
: Ta adnotacja jest tylko specjalistyczną wersją@Component
i umożliwia automatyczne wykrywanie klas kontrolerów na podstawie skanowania ścieżki klas.@RestController
: Ta adnotacja to specjalistyczna wersja,@Controller
która automatycznie dodaje@Controller
i@ResponseBody
adnotacje, więc nie musimy dodawać@ResponseBody
do naszych metod mapowania.źródło
@Controller jest używany w starszych systemach, które używają stron JSP. może zwrócić widoki. @ RestController oznacza, że kontroler zapewnia usługi REST z typem odpowiedzi JSON. więc łączy w sobie adnotacje @Controller i @ResponseBody.
źródło
@RestController
jest kompozycją,@Controller
a@ResponseBody
jeśli nie używamy@ResponseBody
podpisu w metodzie, musimy użyć@Restcontroller
.źródło
Zamiast używać @Controller i @ResponseBody, @RestController pozwala Ci ujawnić API Rest w Spring 4.0 i nowszych wersjach.
źródło