📊 Capítulo 04: Validação & Exception Handling
Especialização Backend com Java 21 & Spring Boot 3
🗺️ O Fluxo Global de Tratamento de Erros
flowchart TD
REQ["HTTP Request com Dados Inválidos"]
--> VALID["Jakarta Validation Engine (@Valid)"]
--> ERR{"Falha de Validação?"}
ERR -- "Sim" --> EX["MethodArgumentNotValidException / CustomException"]
EX --> ADVICE["@RestControllerAdvice Global Handler"]
ADVICE --> PROBLEM["RFC 7807 ProblemDetail Structure\n(type, title, status, detail, instance, errors)"]
PROBLEM --> RESP["HTTP 400 / 404 / 409 / 500 JSON Response"]
style REQ fill:#ede7f6,stroke:#512da8,stroke-width:2px
style VALID fill:#fff3e0,stroke:#ff9800,stroke-width:1.5px
style ERR fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
style EX fill:#ffebee,stroke:#d32f2f,stroke-width:1.5px
style ADVICE fill:#e8f5e9,stroke:#4caf50,stroke-width:2px
style PROBLEM fill:#e1f5fe,stroke:#03a9f4,stroke-width:1.5px
style RESP fill:#c8e6c9,stroke:#2e7d32,stroke-width:2px
🎯 Slide 1: Anotações Canônicas do Jakarta Validation
-
@NotNull: Impede que o campo seja nulo. -
@NotBlank: Garante que a String não seja nula e contenha caracteres visíveis (não apenas espaços). -
@Size(min = 3, max = 50): Limita tamanho de strings ou coleções. -
@Email&@Pattern: Valida formato de e-mail e expressões regulares customizadas. @Positive&@PositiveOrZero: Valida regras numéricas estritas em valores monetários ou quantidades.
🎯 Slide 2: Tratador Global com @RestControllerAdvice
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(ResourceNotFoundException.class)
public ProblemDetail handleNotFound(ResourceNotFoundException ex) {
ProblemDetail problem = ProblemDetail.forStatusAndDetail(
HttpStatus.NOT_FOUND, ex.getMessage()
);
problem.setTitle("Recurso Não Encontrado");
problem.setProperty("timestamp", Instant.now());
return problem;
}
}
- Centraliza 100% dos tratamentos de erro fora dos controllers!
🎯 Slide 3: O Padrão RFC 7807 ProblemDetail no Spring Boot 3
- Estrutura Padronizada Internacional:
status: Código HTTP numérico (ex.: 400, 404, 422).title: Descrição resumida e amigável da categoria do erro.detail: Mensagem detalhada da causa-raiz da exceção.instance: URI da requisição que gerou o incidente.properties: Campos customizados extras (lista de erros de validação por atributo).
Slide 1 de 1
Atalhos: ← → Navegar • Espaço Avançar • F Tela Cheia • Home Início • End Fim