Uma API REST moderna para gerenciamento de usuários, construída com Spring Boot e Java 21
📋 Pré-requisitos • ⚡ Instalação Rápida • 🔧 Configuração • 📚 Documentação da API • 🏗️ Arquitetura
Este é um projeto de demonstração que implementa uma API REST para gerenciamento de usuários utilizando as melhores práticas do ecossistema Spring. O projeto foi desenvolvido com foco na simplicidade, escalabilidade e boas práticas de desenvolvimento.
- ✅ Demonstrar a criação de uma API REST com Spring Boot
- ✅ Implementar operações CRUD básicas para usuários
- ✅ Utilizar JPA/Hibernate para persistência de dados
- ✅ Configurar banco de dados H2 para desenvolvimento
- ✅ Aplicar arquitetura em camadas (Controller, Service, Repository)
| Tecnologia | Versão | Descrição |
|---|---|---|
| Java | 21 | Linguagem de programação com recursos modernos |
| Spring Boot | 3.5.5 | Framework para desenvolvimento de aplicações Java |
| Spring Web | - | Módulo para criação de APIs REST |
| Spring Data JPA | - | Abstração para acesso a dados com JPA |
| H2 Database | - | Banco de dados em memória para desenvolvimento |
| Maven | 3.x | Gerenciador de dependências e build |
Antes de começar, certifique-se de ter instalado:
-
☕ Java 21 ou superior
java -version
-
📦 Maven 3.6+ (ou use o wrapper incluído)
mvn -version
-
💻 IDE (recomendado: IntelliJ IDEA, Eclipse ou VS Code)
Execute os comandos abaixo para verificar se tudo está configurado:
# Verificar Java
java -version
# Deve mostrar: openjdk version "21.x.x"
# Verificar Maven (opcional - pode usar ./mvnw)
mvn -version
# Deve mostrar: Apache Maven 3.x.xgit clone <url-do-repositorio>
cd course# Usando Maven Wrapper (recomendado)
./mvnw spring-boot:run
# Ou usando Maven instalado
mvn spring-boot:runAcesse: http://localhost:8080/users
Você deve ver uma resposta JSON (provavelmente uma lista vazia []).
course/
├── src/
│ ├── main/
│ │ ├── java/com/educandoweb/course/
│ │ │ ├── CourseApplication.java # Classe principal
│ │ │ ├── entities/
│ │ │ │ └── User.java # Entidade JPA
│ │ │ ├── repositories/
│ │ │ │ └── UserRepository.java # Interface de repositório
│ │ │ ├── services/
│ │ │ │ └── UserService.java # Lógica de negócio
│ │ │ ├── resources/
│ │ │ │ └── UserResource.java # Controller REST
│ │ │ └── config/
│ │ │ └── TestConfig.java # Configurações
│ │ └── resources/
│ │ ├── application.properties # Configurações principais
│ │ └── application-test.properties # Configurações de teste
│ └── test/ # Testes unitários
├── pom.xml # Dependências Maven
└── README.md # Este arquivo
spring.application.name=course
spring.profiles.active=test, dev
spring.jpa.open-in-view=true# Configuração do H2 Database
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
# Console H2 habilitado
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
# Configurações JPA
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.defer-datasource-initialization=true
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=trueDurante o desenvolvimento, você pode acessar o console do H2:
- URL: http://localhost:8080/h2-console
- JDBC URL:
jdbc:h2:mem:testdb - Username:
sa - Password: (deixe em branco)
| Método | Endpoint | Descrição | Exemplo |
|---|---|---|---|
GET |
/users |
Lista todos os usuários | GET /users |
GET |
/users/{id} |
Busca usuário por ID | GET /users/1 |
curl -X GET http://localhost:8080/usersResposta:
[
{
"id": 1,
"name": "João Silva",
"email": "joao@email.com",
"username": "joao123",
"password": "senha123"
}
]curl -X GET http://localhost:8080/users/1Resposta:
{
"id": 1,
"name": "João Silva",
"email": "joao@email.com",
"username": "joao123",
"password": "senha123"
}- Importe a coleção (se disponível)
- Configure a base URL:
http://localhost:8080 - Execute as requisições conforme os exemplos acima
O projeto segue o padrão MVC (Model-View-Controller) com separação em camadas:
┌─────────────────┐
│ UserResource │ ← Controller (REST)
│ (Controller) │
└─────────────────┘
│
▼
┌─────────────────┐
│ UserService │ ← Service (Lógica de Negócio)
│ (Business) │
└─────────────────┘
│
▼
┌─────────────────┐
│ UserRepository │ ← Repository (Acesso a Dados)
│ (Data Access) │
└─────────────────┘
│
▼
┌─────────────────┐
│ H2 Database │ ← Persistência
│ (In-Memory) │
└─────────────────┘
- Request →
UserResourcerecebe a requisição HTTP - Controller →
UserServiceprocessa a lógica de negócio - Service →
UserRepositoryacessa os dados - Repository → H2 Database executa a consulta
- Response ← Dados retornam pela mesma cadeia
@Entity
@Table(name = "tb_user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
private String username;
private String password;
// ... getters, setters, equals, hashCode
}Campos:
id: Identificador único (auto-gerado)name: Nome completo do usuárioemail: Endereço de emailusername: Nome de usuário únicopassword: Senha (em produção, deve ser criptografada)
# 1. Clone o repositório
git clone <url>
cd course
# 2. Execute a aplicação
./mvnw spring-boot:run
# 3. Acesse a API
curl http://localhost:8080/users# Executar testes
./mvnw test
# Executar com cobertura
./mvnw test jacoco:report# Gerar JAR
./mvnw clean package
# Executar JAR
java -jar target/course-0.0.1-SNAPSHOT.jar# Solução: Mude a porta
echo "server.port=8081" >> src/main/resources/application.properties# Verifique se o JAVA_HOME está configurado
echo $JAVA_HOME # Linux/Mac
echo %JAVA_HOME% # Windows# Use o wrapper incluído
./mvnw spring-boot:run # Linux/Mac
mvnw.cmd spring-boot:run # Windows# Limpe e recompile
./mvnw clean compilePara ver logs detalhados, adicione ao application.properties:
logging.level.com.educandoweb.course=DEBUG
logging.level.org.springframework.web=DEBUG- 📖 Documentação Spring Boot
- 🎓 Spring Boot Guides
- 🛠️ Spring Data JPA Reference
- 🗄️ H2 Database Documentation
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/AmazingFeature) - Commit suas mudanças (
git commit -m 'Add some AmazingFeature') - Push para a branch (
git push origin feature/AmazingFeature) - Abra um Pull Request
Este projeto trata-se de um projeto acadêmico para fins de estudo e não tem fins lucrativos.
Breno Soares
- 📧 Email: cssbreno@gmail.com
- 💼 LinkedIn: linkedin.com/in/cssbreno
Feito com ❤️ e ☕ (enfase no café)