Sobes.tech
Junior

Qual é a diferença entre RestController e Controller no Spring?

sobes.tech IA

Resposta da IA

O @Controller marca a classe como controlador Spring MVC. Esta classe normalmente devolve nomes de visualizações, que são então processados pelos resolvedores de visualizações para exibir a interface do utilizador (por exemplo, páginas HTML). O @Controller é frequentemente usado para criar aplicações web com renderização no servidor.

@RestController é uma variante especializada de @Controller. Ela adiciona automaticamente a anotação @ResponseBody a cada método. Isto significa que os métodos de @RestController retornam por padrão dados (por exemplo, JSON ou XML), em vez de nomes de visualizações. O @RestController é ideal para criar serviços web RESTful que fornecem dados aos clientes (por exemplo, aplicações frontend ou outros serviços).

Diferença principal:

  • @Controller: Retorna nomes de visualizações.
  • @RestController: Retorna dados (adiciona automaticamente @ResponseBody).

Exemplo de @Controller:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Retorna o nome da visualização
    }
}

Exemplo 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; // Retorna um Map que será convertido em JSON
    }
}