Tópico 09 - Spring Web

Tópico 09 - Spring Web

Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

O que é Spring?

O spring é um ecossistema de frameworks para desenvolvimento Java, com foco em produtividade, organização e baixo acoplamento.

Pode ser usado para criar aplicações desktop, web, mobile, microserviços, APIs REST, integração com banco de dados e muito mais.

Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Spring Framework x Spring Boot

  • Spring Framework fornece os modulos e a base do ecossistema
  • Spring Boot simplifica a configuracao e a inicializacao do projeto
  • Com Spring Boot, o servidor web pode vir embutido
  • O objetivo e reduzir configuracoes manuais e acelerar o desenvolvimento
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Por que usar Spring Web?

O Spring Web é um módulo do Spring Framework que facilita a criação de APIs REST e aplicações web.

Ele abstrai as complexidades do protocolo HTTP, permitindo que você se concentre na lógica de negócio.

Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Spring Initializr

O Spring Initializr e uma ferramenta online para gerar projetos Spring Boot.

Para começar um novo projeto, basta selecionar as dependencias desejadas e baixar o arquivo zip.

Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Recomendação de Configuração

As configurações recomendadas para o Spring Initializr nessa disciplina são:

  • Project: Maven
  • Language: Java
  • Spring Boot: versão mais estável e atual
  • Project Metadata
    • Group: nome de domínio reverso (ex.: com.exemplo)
    • Artifact: nome do projeto (ex: loja-api)
    • Packaging: Jar
    • Configuration: YAML
    • Java: versão instalada na máquina
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Dependências

No processo de criação, podemos selecionar algumas dependências que serão utilizadas no projeto.

  • spring-boot-starter-web: para criar APIs REST
  • spring-boot-starter-validation: para validacao de dados
  • spring-boot-starter-data-jpa: para persistência de dados
  • spring-boot-devtools: para reinicio automatico
  • h2: banco de dados em memória para testes
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Outras dependências opcionais incluem:

  • spring-boot-starter-test: para testes unitários e de integração
  • lombok: para reduzir boilerplate de código
  • spring-boot-starter-security: para autenticação e autorização
  • thymeleaf: para renderização de páginas HTML
  • flyway ou liquibase: para versionamento de banco de dados
  • spring-boot-starter-amqp: para integração com RabbitMQ
  • spring-ai-starter-model-ollama: para integração com modelos de linguagem da Ollama
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Após a criação do projeto, você pode fazer o download do arquivo zip, descompactá-lo e abrir a pasta no seu editor de código favorito (como VS Code ou IntelliJ IDEA).

Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Estrutura basica de projeto

src/main/java/com/exemplo/app/
  controller/
  service/
  repository/
  model/
  dto/
Application.java
  • Cada camada possui uma responsabilidade bem definida
  • Isso ajuda na manutencao, teste e evolucao da aplicacao
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Classe principal

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}
  • @SpringBootApplication ativa configurações automáticas do projeto
  • SpringApplication.run(...) inicializa o contexto e sobe a aplicação
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Controllers

Controllers sao classes responsáveis por receber requisicoes HTTP e devolver respostas.

@RestController
@RequestMapping("/produtos")
public class ProdutoController {
}
  • @RestController indica uma API REST
  • @RequestMapping define o caminho base da rota
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Mapeando endpoints

@GetMapping
public List<Produto> listar() {
    return service.listar();
}

@PostMapping
public Produto criar(@RequestBody Produto produto) {
    return service.criar(produto);
}
  • @GetMapping atende requisicoes GET
  • @PostMapping atende requisicoes POST
  • @RequestBody converte JSON em objeto Java
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Parametros da requisicao

@GetMapping("/{id}")
public Produto buscarPorId(@PathVariable UUID id) {
    return service.buscarPorId(id);
}

@GetMapping("/buscar")
public List<Produto> buscarPorNome(@RequestParam String nome) {
    return service.buscarPorNome(nome);
}
  • @PathVariable le partes da URL
  • @RequestParam le parametros da query string
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Retorno padrão

Por padrão, basta retornar o objeto (ou a lista) e o Spring monta a resposta:

@GetMapping
public List<Produto> listar() {
    return service.listar();
}

@GetMapping("/{id}")
public Produto buscarPorId(@PathVariable UUID id) {
    return service.buscarPorId(id);
}

@DeleteMapping("/{id}")
public void remover(@PathVariable UUID id) {
    service.remover(id);
}
  • O status padrão é 200 OK
  • O corpo é serializado automaticamente (JSON)

Quando for necessário controlar status, cabeçalhos ou corpo da resposta com mais precisão, usaremos ResponseEntity — veremos isso no Tópico 11.

Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Injecao de dependencia

No Spring, objetos podem ser gerenciados pelo container e injetados automaticamente.

@Service
public class ProdutoService {
    private final ProdutoRepository repository;

    public ProdutoService(ProdutoRepository repository) {
        this.repository = repository;
    }
}
  • @Service marca uma classe de regra de negocio
  • O Spring fornece a dependencia pelo construtor
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Camadas da aplicacao

  • Controller: recebe a requisicao e monta a resposta
  • Service: concentra regras de negocio
  • Repository: acessa banco de dados
  • Model ou Entity: representa os dados da aplicacao
  • DTO: estrutura dados de entrada e saida
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Validacao de dados

public class ProdutoDTO {
    @NotBlank
    private String nome;

    @Positive
    private BigDecimal preco;
}
public Produto criar(@Valid @RequestBody ProdutoDTO dto) {
    return service.criar(dto);
}
  • @Valid ativa a validacao do objeto recebido
  • Anotacoes como @NotBlank e @Positive evitam dados invalidos
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

JSON automaticamente

Quando um metodo retorna um objeto Java em um @RestController, o Spring normalmente serializa a resposta em JSON.

@GetMapping("/{id}")
public ProdutoDTO detalhar(@PathVariable UUID id) {
    return service.detalhar(id);
}

Resposta esperada:

{
  "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "nome": "Teclado",
  "preco": 199.90
}
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Tratamento de excecoes

O Spring permite centralizar o tratamento de erros com @RestControllerAdvice:

@RestControllerAdvice
public class ApiExceptionHandler {
    @ExceptionHandler(ProdutoNaoEncontradoException.class)
    public String tratarNaoEncontrado() {
        return "Produto nao encontrado";
    }
}
  • @RestControllerAdvice centraliza tratamento de erros
  • Evita repetir blocos try-catch em todos os controllers

O controle do status e dos cabeçalhos da resposta de erro será aprofundado no Tópico 11.

Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Configurações

O arquivo de configuração de uma aplicação Spring Boot pode ser feito em application.properties ou application.yml.

Esse arquivo é importante para definir propriedades como porta do servidor, conexão com banco de dados, logging e outras configurações.

Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Exemplo do application.properties:

spring.application.name=loja-api
server.port=8080
spring.datasource.url=jdbc:h2:mem:teste

Exemplo do application.yml:

spring:
  application:
    name: loja-api
  datasource:
    url: jdbc:h2:mem:teste
server:
  port: 8080
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Fluxo de uma requisicao

  1. Cliente envia uma requisicao HTTP
  2. O Controller recebe a rota correspondente
  3. O Service aplica as regras de negocio
  4. O Repository consulta ou persiste dados
  5. A resposta volta como JSON com um status HTTP
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Exemplo de rota REST

POST /produtos HTTP/1.1
Content-Type: application/json

{
  "nome": "Mouse",
  "preco": 89.90
}

Resposta:

HTTP/1.1 201 Created
Content-Type: application/json
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

Boas Práticas

  • Separar responsabilidade entre camadas
  • Evitar regra de negocio diretamente no controller
  • Usar DTOs em vez de expor entidades diretamente
  • Validar entradas recebidas pela API
  • Retornar codigos HTTP coerentes com o resultado
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2
Tópico 09 - Spring Web

O que aprendemos hoje

  • O papel do Spring Web no ecossistema Java
  • Diferenca entre Spring Framework e Spring Boot
  • Criacao de rotas com anotacoes
  • Uso de JSON, validacao e retorno de objetos
  • Organizacao em camadas para APIs REST
Disciplina de Backend - Professor Ramon Venson - SATC 2026.2