Criando nosso primeiro serviço REST com SpringBoot – Parte 1

Introdução

Recentemente dei um treinamento na companhia onde trabalho, e resolvi transformá-lo em um tutorial, dividido em quatro partes, bem mão na massa, sem entrar em detalhes sobre as tecnologias, deixando ao leitor que busque maiores informações. A intenção aqui é tem um exemplo funcional dessas tecnologias, abrindo caminho para que com a curiosidade e interesse de quem estiver lendo, possa então se aprofundar em cada um dos assuntos envolvidos.

Nesse tutorial vamos criar uma aplicação usando SpringBoot, com SpringMVC, com SpringDataJpa para camada de persitência, H2 Database para base de dados, SpringDataRest para criação automatizada de API Restful, e SpringFox para documentação com Swagger. Pretendo em breve criar tutoriais mais detalhados sobre cada tecnologia.

Setup Inicial

Vamos criar um projeto que possa nos fornecer as interfaces de Serviço Rest. Esse serviço é apenas um exemplo e demonstra como contruir um projeto rest, simples. No nosso desenvolvimento diário, vamos utilizar serviços já implementados em outro framework/linguagem.

Vamos implementar duas interfaces rest, para listagem e busca por id de um livro.

Primeiro vamos criar o projeto usando o maven

Abrindo o projeto no Eclipse

Vamos importar o projeto no Eclipse usando o item de menu File -> Import..., na caixa de dialógo Import..., escolha Maven -> Existing Maven Projects.

Na caixa de dialógo Import Maven Projects, utilize o botão Browse... para localizar a pasta onde criamos nosso projeto book-rest, e selecionar o arquivo pom.xml . Clique em Finish, para o projeto ser importado.

Vamos utilizar o Eclipse para facilitar o processo de edição mas continuaremos a usar a linha de comando para compilar o nosso projeto.

Vamos acessar esse projeto e apagar os arquivos padrões: App.java e AppTest.java, que serão substituídos pelos arquivos que ainda iremos criar.

SpringBoot

Vamos utilizá-lo para agilizar a construção de nossos projetos, e auxiliar nas dependências necessárias, reduzindo o processo de configuração.

Veja que essa dependência que estamos inserindo é tambem um projeto parent, que personalizará completamente o nosso projeto. Insira o bloco abaixo no pom.xml

Ele fornecerá as dependências e plugins necessários para configuração, compilação e execução do seu projeto.

Propriedades

Podemos definir configurações em comum para todos os projetos, essas configurações podem ser palavras chaves já reservadas e utilizadas pelo maven ou por outros plugins, como também criar novas variáveis que poderão ser utilizadas no próprio contexto do pom.

Plugins

Podemos configurar plugins para adicionar funcionalidades em nosso processo de build.

O trecho de exemplo abaixo define o plugin padrão de compilação do pacote. Perceba que no código temos um ${maven-compiler-plugin.version} utilizado para definir a versão do plugin que será utilizada. Esse valor, maven-compiler-plugin.version, terá que ser definido em um bloco no pom.xml ou em um projeto parent. (Não vamos inserir esse código em nosso projeto)

Insira o trecho abaixo em seu pom.xml, o qual insere as funcionalidades de compilação do SpringBoot ao seus projetos.

Após configurarmos o nosso pom.xml, teremos que realizar o processo de build, para que ele esteja disponível para os nossos projetos futuros. Use mvn clean install.

Para inclusão do spring, faremos inserção de uma dependência:

Abra o pom.xml adicione a referência a projeto parent que acabamos de criar, substituindo todo conteúdo da tag :

Quando usamos o eclipse, ele automaticamente baixa as dependências do projeto, permitindo assim que possamos continuar o desenvolvimento sem precisar executar o maven para baixá-las a cada vez que alteramos o pom.xml.

Caso ele não faça, ou estivermos usando a linha de comando, vamos executar o comando mvn clean install, e se quiser forçar o Eclipse, use o botão direito no projeto, clique em Run as... -> maven install.

Nos dois casos, por causa do uso do spring boot, o maven deverá baixar todas as bibliotecas, mas poderá ocorrer um erro conforme abaixo:

Esse erro será aceitável nesse momento, pois indica que o plugin do spring-boot não localizou uma classe main para usar como executável inicilizador do projeto.

Caso após esse processo, o eclipse continuar a exibir o seu projeto com erro (ícone vermelho) sem ter erro em código fonte ou xml, use o botão direito no projeto, clique em Maven -> Update Project.... Para que o eclipse possa acessar todas as bibliotecas utilizadas pelo maven no seu projeto.

Vamor agora criar a classe Application.java para iniciar o SpringBoot.

Com essa pequena estrutura nós ja temos um projeto web, pronto para ser executado. Para testá-lo vamos executar o comando mvn clean install e em seguinda executaremos o comando mvn spring-boot:run.

Assim que processo estiver pronto você verá a mensagem:

Basta acessar o seu navegador com o seguinte endereço:

Hávera um erro, parecido ao trecho abaixo, já que ainda não colocamos nenhum conteúdo para ser visiualizado em nosso projeto.

Esse erro arrumaremos assim que disponibilizarmos conteúdo.

Por default o projeto é executado na porta 8080. Para mudarmos essa configuração podemos criar uma arquivo application.properties na pasta src/main/resources com o seguinte conteúdo:

Assim, basta executar novamente o mvn spring-boot:run, e o nosso servidor estará disponível em:

POJO, ValueObject, DTO – Model

Vamos adicionar a nossa classe de Pojo:

Veremos que a classe apresenta um erro no campo LocalDate (Se você já estiver usando Java8 a classe poderá ser importada diretamente do JDK, mas nesse projeto a intenção é utilizar a biblioteca joda-time).

Para fazer a correção, primeiramente vamos incluir a biblioteca JodaTime que melhora o comportamento e resolve problemas comuns da biblioteca original de java.util.Date da Linguagem (pré JDK 8). Inclua o seguinte bloco no pom.xml de nosso projeto.

Controller

Vamos criar uma classe chamada BookController.java

Observe que a classe está com a anotação @RestController, que já expoe os métodos da classe e já faz os tratamentos para que o retorno seja tratado como Json.

A anotação @RequestMapping no nível de classe ajuda a compor o endpoint da api.

Agora podemos executar novamente o comando mvn spring-boot:run, que irá subir o nossa aplicação e poderemos chamar os dois endpoints definidos.

Lista de Todos os Livros

Recupera o livro com Id igual a 1

Leave a Reply

Pin It on Pinterest