Redirecionamento em Spring Boot

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.

Exemplo: Lista de Produtos

  1. Exibir a lista de produtos em uma página HTML.
  2. Cadastrar um novo produto via formulário e redirecionar para a lista atualizada.

Passo 1: Controller sem Redirecionamento (Problema!)

1
@Controller
2
public class ProdutoController {
3
4
List<String> produtos = new ArrayList<>();
5
6
// Rota para exibir a lista de produtos
7
@GetMapping("/listarProdutos")
8
public String listarProdutos(Model model) {
9
model.addAttribute("produtos", produtos);
10
return "listarProdutos.html"; // Renderiza o template Thymeleaf
11
}
12
13
// Rota para cadastrar um produto (sem redirecionamento)
14
@PostMapping("/cadastrarProduto")
15
public String cadastrarProduto() {
16
...
17
return "listarProdutos.html"; // ❌ Problema!
18
}
19
}

O Que Acontece Aqui?


Passo 2: Solução com Redirecionamento

1
@PostMapping("/cadastrarProduto")
2
public String cadastrarProduto() {
3
...
4
return "redirect:/listarProdutos"; // ✅ Redireciona para a rota GET
5
}

Por Que Funciona?

  1. O método cadastrarProduto processa o POST, adiciona o produto à lista e retorna redirect:/listarProdutos.
  2. O Spring Boot envia uma resposta HTTP 302 (Found) para o navegador, instruindo-o a fazer uma nova requisição GET para /listarProdutos.
  3. A rota listarProdutos é executada novamente, preenchendo o model com a lista atualizada e renderizando o template corretamente.

Resultado:

Melhores Práticas

  1. POST-Redirect-GET (PRG):

  2. Use redirect:/rota:

  3. 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.