Sobes.tech
Junior

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

sobes.tech AI

Respuesta de la IA

@Controller se utiliza para manejar solicitudes web y devuelve los nombres de las vistas (.jsp, .html, etc.). Se usa a menudo en la arquitectura MVC, donde se encarga de interactuar con el modelo de datos y seleccionar la vista para mostrar.

@RestController es una versión especializada de @Controller. Convierte automáticamente los valores devueltos por los métodos en formato de respuesta HTTP, generalmente en JSON o XML. Esto se logra mediante la inclusión automática de @ResponseBody en cada método dentro del controlador. @RestController se usa más comúnmente para crear servicios web RESTful que proporcionan datos en bruto, en lugar de devolver páginas HTML.

Característica @Controller @RestController
Propósito Manejar solicitudes web, devolver vistas Crear servicios web RESTful, devolver datos (JSON, XML)
@ResponseBody Requiere uso explícito en cada método que devuelve datos Se aplica automáticamente a todos los métodos
Tipo de retorno Nombre de vista (String), ModelAndView Datos (objetos, List, etc.), serializados automáticamente

Ejemplo:

@Controller:

// Ejemplo de uso de @Controller
@Controller
@RequestMapping("/view")
public class ViewController {

    @GetMapping("/hello")
    public String sayHello() {
        return "hello"; // Devuelve el nombre de la vista (por ejemplo, hello.jsp)
    }
}

@RestController:

// Ejemplo de uso de @RestController
@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/user")
    public User getUser() {
        // Supongamos que existe una clase User
        return new User("John Doe", 30); // Devuelve la representación JSON del objeto User
    }
}