Criando uma API REST com Spring Boot
Spring Boot é um framework Java que faz um projeto de servidor rodar rapidamente. A maior parte da configuração padrão já vem pronta: um servidor Tomcat embutido, acesso a banco de dados e conversão de JSON. Este artigo cria uma pequena API REST em três camadas: Controller, Service e Repository.
Nota de teste: o computador usado para escrever este artigo não tinha Maven nem Gradle, e o download das bibliotecas do Spring não foi testado aqui. O código abaixo segue o padrão usual. Execute você mesmo e confira o resultado antes de usar de verdade.
O que você precisa
- JDK 17 ou mais recente
- Maven ou Gradle
- VS Code com a extensão Spring Boot, ou IntelliJ IDEA
Três camadas
Passo 1: crie o projeto
Acesse https://start.spring.io, escolha Maven e Java 17, adicione as dependências Spring Web e Spring Data JPA, depois gere e extraia o projeto.
Passo 2: classe de dados
package com.example.demo;
import jakarta.persistence.*;
@Entity
public class Note {
@Id
@GeneratedValue
private Long id;
private String title;
public Note() {}
public Note(String title) { this.title = title; }
public Long getId() { return id; }
public String getTitle() { return title; }
public void setTitle(String title) { this.title = title; }
}
Passo 3: repository
package com.example.demo;
import org.springframework.data.jpa.repository.JpaRepository;
public interface NoteRepository extends JpaRepository<Note, Long> {
}
O Spring Data fornece automaticamente métodos básicos como `findAll`, `save` e `deleteById` por meio do `JpaRepository`.
Passo 4: service
package com.example.demo;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class NoteService {
private final NoteRepository repository;
public NoteService(NoteRepository repository) {
this.repository = repository;
}
public List<Note> all() {
return repository.findAll();
}
public Note create(String title) {
return repository.save(new Note(title));
}
}
Passo 5: controller
package com.example.demo;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/notes")
public class NoteController {
private final NoteService service;
public NoteController(NoteService service) {
this.service = service;
}
@GetMapping
public List<Note> list() {
return service.all();
}
@PostMapping
public Note create(@RequestBody Note body) {
return service.create(body.getTitle());
}
}
Passo 6: execute e teste
./mvnw spring-boot:run
Teste com curl:
curl -X POST http://localhost:8080/api/notes -H "Content-Type: application/json" -d "{\"title\":\"Comprar café\"}"
curl http://localhost:8080/api/notes
Erros comuns
- **Nome do pacote que não corresponde à estrutura de pastas:** o Spring encontra as classes a partir do pacote principal, então coloque suas classes em um pacote abaixo do mesmo pacote da classe anotada com `@SpringBootApplication`.
- **Driver do banco de dados não adicionado:** a conexão falha. Adicione o driver e configure o `application.properties`.
- **Entrada inválida salva sem verificação:** use Bean Validation para checar os dados antes de salvar.
Próximos passos
Adicione validação de entrada, centralize o tratamento de erros com `@ControllerAdvice` e teste o service com JUnit.
Resumo
O Spring Boot organiza a REST API em três camadas. O Controller recebe as requisições, o Service guarda a lógica, e o Repository conversa com o banco de dados. Essa separação torna o código mais fácil de testar e de manter.