Objetivo do Artigo

Neste artigo, os estudantes irão:

  • Compreender a estrutura de um projeto Spring Boot.
  • Aprender sobre os principais componentes: Controller, Service e Repository.
  • Utilizar o Lombok para simplificar o código.
  • Implementar um CRUD básico sem banco de dados.

Caso não tenha lido o post anterior: https://kanechan.com.br/introducao-ao-backend-e-configuracao-do-ambiente/

Para esse projeto pode adicionar as seguintes dependências:


1. Estrutura de um Projeto Spring Boot

Ao criar um projeto com o Spring Boot, obtemos a seguinte estrutura:

meu-projeto/
│── src/
│   ├── main/java/com/exemplo/
│   │   ├── MeuProjetoApplication.java  # Classe principal
│   │   ├── controller/                 # Camada de controle
│   │   ├── service/                    # Camada de serviço
│   │   ├── repository/                 # Camada de acesso a dados
│   │   ├── model/                      # Modelos de entidade
│   ├── main/resources/
│   │   ├── application.properties       # Configurações do projeto
│── pom.xml                              # Dependências do projeto

2. Conceito de Camadas no Spring Boot

2.1 Controller (Camada de Controle)

  • Responsável por expor as APIs REST e gerenciar as requisições HTTP.
  • Utiliza anotações como @RestController para indicar que a classe manipula requisições.
  • Define os endpoints e recebe dados enviados pelo cliente.

Exemplo:

@RestController
@RequestMapping("/api/produtos")
public class ProdutoController {
    @GetMapping
    public String listarProdutos() {
        return "Lista de produtos";
    }
}

2.2 Service (Camada de Serviço)

  • Contém a lógica de negócio e regras da aplicação.
  • Utiliza @Service para indicar que é um componente de serviço.
  • O Controller delega a responsabilidade para essa camada.

Exemplo:

@Service
public class ProdutoService {
    public String obterMensagem() {
        return "Mensagem da lógica de negócio";
    }
}

2.3 Repository (Camada de Repositório)

  • Responsável pelo acesso aos dados, como conexão com banco de dados.
  • Utiliza @Repository para indicar que é uma classe de persistência.
  • Quando há banco de dados, estende JpaRepository para facilitar operações.

Exemplo:

@Repository
public interface ProdutoRepository extends JpaRepository<Produto, Long> {
    List<Produto> findByNome(String nome);
}

3. Criando um CRUD Simples (Sem Banco de Dados)

3.1 Criando a Entidade Produto

Dentro do pacote model, crie um arquivo Produto.java:

package com.exemplo.model;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Produto {
    private Long id;
    private String nome;
    private Double preco;
}

Explicação:

  • @Data: Gera automaticamente getters, setters e toString().
  • @AllArgsConstructor: Gera um construtor com todos os atributos.
  • @NoArgsConstructor: Gera um construtor vazio.

3.2 Criando o Serviço ProdutoService

Dentro do pacote service, crie o arquivo ProdutoService.java:

package com.exemplo.service;

import com.exemplo.model.Produto;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;

@Service
public class ProdutoService {
    private List<Produto> produtos = new ArrayList<>();

    public List<Produto> listarProdutos() {
        return produtos;
    }

    public Produto adicionarProduto(Produto produto) {
        produtos.add(produto);
        return produto;
    }
}

3.3 Criando o Controller ProdutoController

Dentro do pacote controller, crie o arquivo ProdutoController.java:

package com.exemplo.controller;

import com.exemplo.model.Produto;
import com.exemplo.service.ProdutoService;
import org.springframework.web.bind.annotation.*;
import java.util.List;

@RestController
@RequestMapping("/api/produtos")
public class ProdutoController {

    private final ProdutoService produtoService;

    public ProdutoController(ProdutoService produtoService) {
        this.produtoService = produtoService;
    }

    @GetMapping
    public List<Produto> listarProdutos() {
        return produtoService.listarProdutos();
    }

    @PostMapping
    public Produto adicionarProduto(@RequestBody Produto produto) {
        return produtoService.adicionarProduto(produto);
    }
}

3.4 Testando a API

  1. Executar a aplicação:./mvnw spring-boot:run
  2. Testar os endpoints no Postman:
    • GET http://localhost:8080/api/produtos → Lista todos os produtos.
    • POST http://localhost:8080/api/produtos (Body JSON):{ "id": 1, "nome": "Notebook", "preco": 2500.0 }

4. Exercício para os Alunos

Crie um CRUD básico para gerenciar Clientes, seguindo os mesmos passos:

  • Criar a classe Cliente dentro de model.
  • Criar a classe ClienteService dentro de service.
  • Criar a classe ClienteController dentro de controller.
  • Testar os endpoints via Postman.

Dica:

  • Cliente deve ter id, nome e email.
  • Utilize o mesmo padrão da API de Produtos.

Conclusão

Neste artigo, aprendemos: ✔ A estrutura de um projeto Spring Boot. ✔ A separação por camadas (Controller, Service, Repository). ✔ Como utilizar o Lombok para simplificar o código. ✔ Implementamos um CRUD sem banco de dados.

No próximo artigo, vamos adicionar banco de dados com JPA e Hibernate! 🚀

Categorized in:

Spring Boot,