Mapeamento de URLs com @RequestMapping
No Spring Boot, a anotação @RequestMapping é usada para definir rotas de URL que mapeiam para métodos de controlador. Isso permite criar endpoints RESTful e controladores web de forma declarativa.
Controladores HTTP com @Controlelr e FreeMarker
Para processar requisições HTTP e renderizar páginas, utilize @Controller com templates FreeMaker. Adicione a dependência no arquivo pom.xml:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
Exemplo de controlador:
package com.example.controlador;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/cumprimento")
public class ControladorSaudacaoFreemarker {
@RequestMapping("/ola")
public ModelAndView exibirSaudacao() {
ModelAndView modelo = new ModelAndView();
modelo.addObject("saudacao", "Olá, Spring Boot!");
modelo.setViewName("olaMundo");
return modelo;
}
}
Crie o template src/main/resources/templates/olaMundo.ftl:
<html>
<head>
<meta charset="UTF-8">
<title>Saudação</title>
</head>
<body>
Mensagem: ${saudacao}
</body>
</html>
Acesse http://localhost:8888/exemplo/cumprimento/ola para ver a saudação exibida.
Respostas para AJAX com @RestController
Para lidar com requisições AJAX e retornar dados JSON, use @RestController. Exemplo:
package com.example.controlador;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class ControladorRestDados {
@RequestMapping("/info")
public String obterDados() {
return "{\"resultado\":\"Sucesso\",\"codigo\":200}";
}
}
Obtenção de Parâmetros de URL com @PathVariable
Para capturar segmentos de URL, utilize @PathVariable. Crie um controlador para gerenciar artigos:
package com.example.controlador;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/artigo")
public class ControladorArtigo {
@RequestMapping("/{codigo}")
public ModelAndView mostrarDetalhes(@PathVariable("codigo") Integer codigo) {
ModelAndView modelo = new ModelAndView();
modelo.addObject("identificador", codigo);
modelo.setViewName("detalhesArtigo");
return modelo;
}
}
Template src/main/resources/templates/detalhesArtigo.ftl:
<html>
<head>
<meta charset="UTF-8">
<title>Detalhes do Artigo</title>
</head>
<body>
ID do Artigo: ${identificador}
</body>
</html>
Obtenção de Parâmetros de Requisição com @RequestParam
Para obter parâmetros da query string ou formulários, use @RequestParam. Exemplo:
package com.example.controlador;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
@RequestMapping("/busca")
public class ControladorBusca {
@RequestMapping("/pesquisar")
public ModelAndView executarPesquisa(@RequestParam(value="termo", required=false) String termo) {
ModelAndView modelo = new ModelAndView();
modelo.addObject("termoPesquisa", termo);
modelo.setViewName("resultadoBusca");
return modelo;
}
}
Template src/main/resources/templates/resultadoBusca.ftl:
<html>
<head>
<meta charset="UTF-8">
<title>Resultado da Busca</title>
</head>
<body>
Termo: ${termoPesquisa}
</body>
</html>
Integração com Frontend
Crie uma página HTML para testar os endpoints. Exemplo webapp/paginaPrincipal.html:
<html>
<head>
<meta charset="UTF-8">
<title>Página Principal</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
function carregarDados() {
$.post("/exemplo/api/info", {}, function(dados) {
alert(dados);
});
}
</script>
</head>
<body>
<button onclick="carregarDados()">Obter Dados</button>
<a href="/exemplo/artigo/42">Ver Artigo</a>
<a href="/exemplo/busca/pesquisar?termo=spring">Buscar</a>
</body>
</html>
Teste acessando http://localhost:8888/exemplo/paginaPrincipal.html. O botão exibirá um alerta com dados JSON, os links redirecionarão para páginas renderizadas com FreeMaker.