Redirecionamentos são fundamentais em aplicações Web para guiar usuários entre páginas após ações como login, envio de formulários ou atualizações de conteúdo. No Spring Boot, a abordagem mais simples e direta para implementar redirecionamentos é usando @Controller
em conjunto com o prefixo redirect
. Vamos aprender através de um exemplo prático.
1@Controller2public class ProdutoController {3
4 List<String> produtos = new ArrayList<>();5
6 // Rota para exibir a lista de produtos7 @GetMapping("/listarProdutos")8 public String listarProdutos(Model model) {9 model.addAttribute("produtos", produtos);10 return "listarProdutos.html"; // Renderiza o template Thymeleaf11 }12
13 // Rota para cadastrar um produto (sem redirecionamento)14 @PostMapping("/cadastrarProduto")15 public String cadastrarProduto() {16 ...17 return "listarProdutos.html"; // ❌ Problema!18 }19}
/listarProdutos
, o método listarProdutos
popula o model com a lista e renderiza o template corretamente./cadastrarProduto
, o método retorna diretamente o template listarProdutos.html
, mas o model não é preenchido novamente. Resultado:
/cadastrarProduto
, causando confusão ao usuário.1@PostMapping("/cadastrarProduto")2public String cadastrarProduto() {3 ...4 return "redirect:/listarProdutos"; // ✅ Redireciona para a rota GET5}
cadastrarProduto
processa o POST, adiciona o produto à lista e retorna redirect:/listarProdutos
./listarProdutos
.listarProdutos
é executada novamente, preenchendo o model com a lista atualizada e renderizando o template corretamente./listarProdutos
.POST-Redirect-GET (PRG):
Use redirect:/rota
:
Mantenha a Separação de Responsabilidades:
Usar redirect:
no Spring Boot é essencial para garantir que o ciclo de vida das requisições HTTP seja respeitado, especialmente após operações que modificam dados (como POST). No exemplo apresentado, o redirecionamento não apenas atualiza a lista de produtos corretamente, mas também melhora a experiência do usuário ao manter a URL consistente e evitar comportamentos inesperados.