Configuração do MVC no Spring Boot

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.

Tags: Spring Boot MVC java FreeMarker RESTful API

Publicado em 6-3 04:06 por Thomas