Qual è la differenza tra le annotazioni RestController e Controller in Spring?
sobes.tech AI
Risposta dell'AI
@Controller viene utilizzato per definire controller che gestiscono le richieste web. I metodi in una tale classe di solito restituiscono i nomi delle viste, che Spring MVC poi rende.
@RestController è una versione specializzata di @Controller. Combina @Controller e @ResponseBody. Ciò significa che i metodi in una tale classe per impostazione predefinita non restituiscono i nomi delle viste, ma oggetti che vengono automaticamente serializzati in JSON o XML (a seconda della configurazione) e inviati indietro al client nel corpo della risposta HTTP.
La differenza principale è che @Controller è destinato a creare applicazioni web con rendering tradizionale lato server (architettura MVC), mentre @RestController è per creare servizi web RESTful, dove le risposte sono presentate sotto forma di dati.
Si può dire che @RestController è zucchero sintattico per @Controller più @ResponseBody.
// Esempio di utilizzo di @Controller
@Controller
@RequestMapping("/pages")
public class ViewController {
@GetMapping("/welcome")
public String showWelcomePage() {
return "welcome"; // Restituisce il nome della vista (welcome.html, welcome.jsp, ecc.)
}
}
// Esempio di utilizzo di @RestController
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// Restituisce un oggetto User che verrà automaticamente serializzato in JSON/XML
return userService.findById(id);
}
}