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