Sobes.tech
Junior

Qual é a diferença entre RestController e Controller?

sobes.tech IA

Resposta da IA

@Controller é utilizado para tratar pedidos web e devolve os nomes das visualizações (.jsp, .html, etc.). É frequentemente utilizado na arquitetura MVC, onde é responsável por interagir com o modelo de dados e selecionar a visualização para exibir.

@RestController é uma versão especializada de @Controller. Converte automaticamente os valores devolvidos pelos métodos para o formato de resposta HTTP, geralmente em JSON ou XML. Isto é conseguido através da inclusão automática de @ResponseBody em cada método dentro do controlador. @RestController é mais frequentemente utilizado para criar serviços web RESTful que fornecem dados em bruto, em vez de devolver páginas HTML.

Característica @Controller @RestController
Propósito Processar pedidos web, devolver visualizações Criar serviços web RESTful, devolver dados (JSON, XML)
@ResponseBody Requer uso explícito em cada método que devolve dados Aplicado automaticamente a todos os métodos
Tipo de retorno Nome da visualização (String), ModelAndView Dados (objetos, List, etc.), serializados automaticamente

Exemplo:

@Controller:

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

    @GetMapping("/hello")
    public String sayHello() {
        return "hello"; // Devolve o nome da visualização (por exemplo, hello.jsp)
    }
}

@RestController:

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

    @GetMapping("/user")
    public User getUser() {
        // Suponha que exista uma classe User
        return new User("John Doe", 30); // Devolve a representação JSON do objeto User
    }
}