O que é um Controller no Spring MVC?

No Spring MVC, um Controller é responsável por lidar com requisições HTTP e retornar respostas para o cliente.

O que é um Controller no Spring MVC?

No Spring MVC, um Controller é responsável por receber requisições HTTP, processá-las e retornar uma resposta. Ele faz parte do padrão MVC (Model-View-Controller) e atua como intermediário entre a camada de visualização (View) e a lógica de negócios (Model).

1. Criando um Controller Simples

Vamos criar um Controller básico para lidar com requisições GET e POST.

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class MeuController {

    @GetMapping("/mensagem")
    public String obterMensagem() {
        return "Olá, esta é uma mensagem de um Controller no Spring MVC!";
    }

    @PostMapping("/saudacao")
    public String saudacao(@RequestParam String nome) {
        return "Olá, " + nome + "! Seja bem-vindo ao Spring MVC.";
    }
}

Explicação:

  • @RestController: Define que esta classe é um Controller REST.
  • @RequestMapping("/api"): Define o prefixo dos endpoints.
  • @GetMapping("/mensagem"): Define um endpoint GET que retorna uma mensagem.
  • @PostMapping("/saudacao"): Define um endpoint POST que recebe um parâmetro via RequestParam.

2. Como o Spring MVC Processa as Requisições?

Quando um cliente faz uma requisição para http://localhost:8080/api/mensagem, o Spring MVC:

  1. Intercepta a requisição e identifica o método obterMensagem().
  2. Executa o método e retorna a resposta.
  3. O retorno do método é enviado ao cliente como texto ou JSON.

3. Retornando JSON no Controller

Geralmente, os Controllers no Spring MVC retornam JSON, em vez de apenas texto. Veja um exemplo de Controller que retorna um objeto JSON:

import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/api")
public class ProdutoController {

    @GetMapping("/produtos")
    public List<Produto> listarProdutos() {
        return List.of(
            new Produto(1, "Notebook", 4500.00),
            new Produto(2, "Smartphone", 2200.00)
        );
    }
}

class Produto {
    private int id;
    private String nome;
    private double preco;

    public Produto(int id, String nome, double preco) {
        this.id = id;
        this.nome = nome;
        this.preco = preco;
    }

    public int getId() { return id; }
    public String getNome() { return nome; }
    public double getPreco() { return preco; }
}

Explicação:

  • O método listarProdutos() retorna uma lista de objetos.
  • O Spring Boot converte automaticamente esses objetos para JSON.
  • O JSON gerado será parecido com:
[
    { "id": 1, "nome": "Notebook", "preco": 4500.00 },
    { "id": 2, "nome": "Smartphone", "preco": 2200.00 }
]

4. Diferença Entre @Controller e @RestController

O Spring oferece duas anotações principais para Controllers:

Anotação Uso
@Controller Usado para aplicações que retornam páginas HTML via Thymeleaf ou JSP
@RestController Usado para APIs REST que retornam JSON ou XML

5. Testando a API com Postman

  • Para testar GET:
    • Acesse http://localhost:8080/api/mensagem no navegador.
  • Para testar POST:
    • No Postman, faça uma requisição POST para http://localhost:8080/api/saudacao?nome=João.
    • O servidor responderá com: Olá, João! Seja bem-vindo ao Spring MVC.

Conclusão

Um Controller no Spring MVC gerencia requisições HTTP e define a lógica de resposta. Ele pode retornar JSON, HTML ou redirecionar para outras páginas. O Spring Boot facilita essa implementação, tornando a criação de APIs REST e aplicações web Java mais produtiva.

No desenvolvimento web com Java, o Spring MVC se tornou o padrão para lidar com requisições HTTP. Antes, os desenvolvedores precisavam configurar Servlets manualmente, tornando o processo demorado e complexo. Com o Spring MVC, basta anotar uma classe com @RestController e definir métodos para cada tipo de requisição, simplificando o desenvolvimento de APIs REST.

Algumas aplicações:

  • Criação de APIs REST
  • Desenvolvimento de aplicações web com Spring Boot
  • Manipulação de requisições HTTP
  • Integração entre frontend e backend

Dicas para quem está começando

  • Use @RestController para APIs REST e @Controller para páginas HTML
  • Teste suas requisições com Postman antes de integrar com o frontend
  • Aprenda sobre @RequestParam e @RequestBody para capturar dados do cliente
  • Use @RequestMapping para definir a rota base do Controller

Contribuições de Rodrigo Farias

Compartilhe este tutorial: O que é um Controller no Spring MVC

Compartilhe este tutorial

Continue aprendendo:

Como receber e enviar JSON em uma API Java

Em APIs REST Java, a comunicação entre cliente e servidor é feita via JSON, utilizando bibliotecas como Jackson para serialização e desserialização.

Tutorial anterior

Como fazer requisições HTTP em Java

Fazer requisições HTTP em Java é essencial para consumir APIs e se conectar a serviços web, utilizando bibliotecas como HttpClient e RestTemplate.

Próximo tutorial