Sobes.tech
Junior

¿Cuál es la diferencia entre RestController y Controller en Spring?

sobes.tech AI

Respuesta de la IA

@Controller marca la clase como controlador de Spring MVC. Esta clase generalmente devuelve nombres de vistas, que luego son procesados por los resolutores de vistas para mostrar la interfaz de usuario (por ejemplo, páginas HTML). @Controller se usa a menudo para crear aplicaciones web con renderizado en el servidor.

@RestController es una variante especializada de @Controller. Añade automáticamente la anotación @ResponseBody a cada método. Esto significa que los métodos en @RestController devuelven datos (como JSON o XML) por defecto, en lugar de nombres de vistas. @RestController es ideal para crear servicios web RESTful que proporcionan datos a los clientes (como aplicaciones frontend u otros servicios).

Diferencia principal:

  • @Controller: Devuelve nombres de vistas.
  • @RestController: Devuelve datos (añade automáticamente @ResponseBody).

Ejemplo de @Controller:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Devuelve el nombre de la vista
    }
}

Ejemplo de @RestController:

@RestController
public class DataController {

    @GetMapping("/data")
    public Map<String, String> getData() {
        Map<String, String> response = new HashMap<>();
        response.put("status", "success");
        response.put("message", "Data retrieved");
        return response; // Devuelve un Map que será convertido a JSON
    }
}