Sobes.tech
Junior

Qual é a diferença entre as anotações RestController e Controller no Spring?

sobes.tech IA

Resposta da IA

@Controller é usado para definir controladores que lidam com pedidos web. Os métodos numa tal classe normalmente retornam nomes de vistas, que o Spring MVC depois renderiza.

@RestController é uma versão especializada de @Controller. Combina @Controller e @ResponseBody. Isto significa que os métodos numa tal classe por padrão não retornam nomes de vistas, mas objetos que são automaticamente serializados em JSON ou XML (dependendo da configuração) e enviados de volta ao cliente no corpo da resposta HTTP.

Assim, a principal diferença é que @Controller destina-se a criar aplicações web com renderização tradicional do lado do servidor (arquitetura MVC), enquanto que @RestController é para criar serviços web RESTful, onde as respostas são apresentadas em forma de dados.

Pode-se dizer que @RestController é açúcar sintático para @Controller mais @ResponseBody.

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

    @GetMapping("/welcome")
    public String showWelcomePage() {
        return "welcome"; // Retorna o nome da vista (welcome.html, welcome.jsp, etc.)
    }
}

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

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        // Retorna um objeto User que será automaticamente serializado em JSON/XML
        return userService.findById(id);
    }
}