Sobes.tech
Junior

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);
    }
}