Aula 09 - Validação de Dados e Exceções ✅
Nesta aula, vamos garantir que nossa API nunca aceite dados inválidos e que os erros sejam tratados de forma profissional, com mensagens claras.
😊 Por que Validar? 🛡️
O lema de todo desenvolvedor backend deve ser: "Nunca confie nos dados vindos do cliente". O frontend pode ter falhas, ou alguém pode enviar dados maliciosos diretamente para a API.
🧠 Bean Validation
O Spring integra a especificação Bean Validation, permitindo validar campos direto na entidade com anotações.
@Entity
public class Produto {
@Id @GeneratedValue
private Long id;
@NotBlank(message = "O nome é obrigatório")
private String nome;
@Positive(message = "O preço deve ser maior que zero")
private double preco;
}
No Controller, ativamos a validação com @Valid:
@PostMapping
public Produto criar(@Valid @RequestBody Produto produto) {
return service.salvar(produto);
}
📊 Fluxo de Validação
graph TD
A[Requisição chega] --> B{Dados válidos?}
B -- Sim --> C[Processa normalmente]
B -- Não --> D[Retorna 400 Bad Request com detalhes] 🧠 Tratamento Global de Exceções
Important
Em vez de espalhar try/catch por todo o código, usamos um @RestControllerAdvice — uma classe central que captura exceções de toda a aplicação.
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(MethodArgumentNotValidException.class)
public ResponseEntity<String> tratarValidacao(MethodArgumentNotValidException ex) {
return ResponseEntity.badRequest().body("Dados inválidos: " + ex.getMessage());
}
}
📝 Exercícios Progressivos
- Básico: O que faz a anotação
@NotBlank? - Básico: Para que serve
@Validno parâmetro de um método do Controller? - Intermediário: Qual a vantagem de usar
@RestControllerAdviceem vez detry/catchem cada método? - Intermediário: Qual Status Code HTTP costuma ser retornado quando a validação falha?
- Desafio: Adicione as anotações
@Emaile@Size(min=8)a uma entidadeUsuario(camposemailesenha).
🚀 Mini-projeto: Adicione validações (@NotBlank, @Positive) à entidade Produto e crie um GlobalExceptionHandler que retorne uma mensagem amigável quando a validação falhar.