Adnotacje Spring @Controller i @RestController

1. Przegląd

W tym krótkim samouczku omówimy różnicę między adnotacjami @Controller i @RestController w Spring MVC.

Pierwsza adnotacja jest używana dla tradycyjnych kontrolerów Spring i była częścią struktury przez bardzo długi czas.

@RestController adnotacja została wprowadzona wiosną 4,0 uproszczenie tworzenia relaksującego usług internetowych. Jest to wygodna adnotacja, która łączy @Controller i @ResponseBody - co eliminuje potrzebę adnotacji każdej metody obsługi żądań klasy kontrolera adnotacją @ResponseBody .

2. Sprężyna MVC @Controller

Klasyczne kontrolery można opatrzyć adnotacją @Controller . Jest to po prostu specjalizacja klasy @Component i pozwala na automatyczne wykrywanie klas implementacji poprzez skanowanie ścieżek klas.

@Controller jest zwykle używany w połączeniu z adnotacją @RequestMapping używaną w metodach obsługi żądań.

Zobaczmy szybki przykład kontrolera Spring MVC:

@Controller @RequestMapping("books") public class SimpleBookController { @GetMapping("/{id}", produces = "application/json") public @ResponseBody Book getBook(@PathVariable int id) { return findBookById(id); } private Book findBookById(int id) { // ... } } 

Metoda obsługi żądań jest oznaczona adnotacją @ResponseBody . Ta adnotacja umożliwia automatyczną serializację zwracanego obiektu do HttpResponse .

3. Sprężyna MVC @RestController

@RestController to wyspecjalizowana wersja kontrolera. Zawiera adnotacje @Controller i @ResponseBody , dzięki czemu upraszcza implementację kontrolera:

@RestController @RequestMapping("books-rest") public class SimpleBookRestController { @GetMapping("/{id}", produces = "application/json") public Book getBook(@PathVariable int id) { return findBookById(id); } private Book findBookById(int id) { // ... } } 

Kontroler jest opatrzony adnotacją @RestController , dlatego @ResponseBody nie jest wymagany.

Każda metoda obsługi żądań klasy kontrolera automatycznie serializuje zwracane obiekty do HttpResponse .

4. Wniosek

W tym artykule widzieliśmy klasyczne i wyspecjalizowane kontrolery REST dostępne w Spring Framework.

Kompletny kod źródłowy przykładu jest dostępny w projekcie GitHub; jest to projekt Maven, więc można go importować i używać w takiej postaci, w jakiej jest.