Kada razvijamo veb aplikaciju koristeći Spring Framework, možemo da koristimo dve anotacije za kreiranje kontrolera: @Controller i @RestController. Glavna razlika je u tome kako obrađuju zahteve od klijenta i kada se koriste.
Spring MVC @Controller
Anotaciju @Controller koristimo za kreiranje klasičnih Spring MVC kontrolera. Predstavlja specijalizaciju @Component klase koja nam omogućava automatsku detekciju implementiranih klasa pri skeniranju classpath-a.
@Controller
@RequestMapping("books")
public class SimpleBookController {
@GetMapping(value="/{id}", produces = "application/json")
public @ResponseBody Book getBook(@PathVariable int id) {
return findBookById(id);
}
private Book findBookById(int id) {
// ...
}
}
Anotacija @ResponseBody je stavljena kako bi se izvršila automatska serijalizacija povratnog objekta u HTTP odgovor. Ukoliko izbacimo @ResponseBody anotaciju, podrazumeva se da se vraća ime pogleda, a ne telo HTTP odgovora.
Spring MVC @RestController
@RestController je specifičan tip kontrolera koji se koristi pri izradi RESTful veb servisa. Ova anotacija uključuje @Controller i @ResponseBody anotacije. Pogodan je kada želimo direktno da vratimo podatke bez potrebe za pogledima.
@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) {
// ...
}
}
Svaka handler metoda u kontroleru autmatski serijalizuje povratni objekat u HTTP odgovor.