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:
- Intercepta a requisição e identifica o método
obterMensagem()
. - Executa o método e retorna a resposta.
- 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.
- Acesse
- 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.
- No Postman, faça uma requisição POST para
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.
Por que o Spring MVC simplificou o desenvolvimento web em Java?
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