🧩 Exercícios: Validação com Jakarta e Exception Handling Global
Spec Backend Com Java E Springboot • Trilha Progressiva em 4 Níveis
🎯 Nível 1: Fundamentos
Problema 04.1 — Anotações Jakarta Validation (@NotBlank, @Positive, @Email)
Contexto: Anotações Jakarta Validation (@NotBlank, @Positive, @Email) no contexto de Validação com Jakarta e Exception Handling Global.
Requisitos de Execução:
- Aplicar
@NotBlank,@Size,@Positivee@Emailem DTO e habilitar validação com@Valid.
Resultado Esperado
DTO com validação declarativa jakarta.validation.constraints.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_1_SeuNome - Envie na tarefa:
Atividade Cap 04 - Validação com Jakarta e Exception Handling Global
🔑 Gabarito de Código & Solução Comentada
// ClienteDTO.java
package com.empresa.api.dto;
import jakarta.validation.constraints.*;
import java.math.BigDecimal;
public record ClienteDTO(
@NotBlank(message = "Nome é obrigatório")
@Size(min = 3, max = 100)
String nome,
@NotBlank @Email(message = "E-mail inválido")
String email,
@NotNull @Positive
BigDecimal limiteCredito
) {}
🔍 Nível 2: Prática
Problema 04.2 — Tratamento Global de Erros com @RestControllerAdvice e @ExceptionHandler
Contexto: Tratamento Global de Erros com @RestControllerAdvice e @ExceptionHandler no contexto de Validação com Jakarta e Exception Handling Global.
Requisitos de Execução:
- Criar classe de interceptação global formatando respostas de erro em padrão RFC 7807 (ProblemDetails).
Resultado Esperado
Exceções capturadas e formatadas com status code e lista de violações.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_2_SeuNome - Envie na tarefa:
Atividade Cap 04 - Validação com Jakarta e Exception Handling Global
🔑 Gabarito de Código & Solução Comentada
// GlobalExceptionHandler.java
package com.empresa.api.exception;
import org.springframework.http.HttpStatus;
import org.springframework.http.ProblemDetail;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.net.URI;
@RestControllerAdvice
public class GlobalExceptionHandler {
@ExceptionHandler(RecursoNaoEncontradoException.class)
public ProblemDetail handleNotFound(RecursoNaoEncontradoException ex) {
ProblemDetail problem = ProblemDetail.forStatusAndDetail(HttpStatus.NOT_FOUND, ex.getMessage());
problem.setType(URI.create("https://api.empresa.com/erros/nao-encontrado"));
return problem;
}
}
⚡ Nível 3: Integração
Problema 04.3 — Validador Customizado com ConstraintValidator
Contexto: Validador Customizado com ConstraintValidator no contexto de Validação com Jakarta e Exception Handling Global.
Requisitos de Execução:
- Criar anotação customizada
@CpfValidoe classe validadora calculando dígitos verificadores de CPF.
Resultado Esperado
Validação customizada de CPF integrada ao pipeline do Jakarta Validation.
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_3_SeuNome - Envie na tarefa:
Atividade Cap 04 - Validação com Jakarta e Exception Handling Global
🔑 Gabarito de Código & Solução Comentada
// CpfValidator.java
package com.empresa.api.validation;
import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;
public class CpfValidator implements ConstraintValidator<CpfValido, String> {
@Override
public boolean isValid(String valor, ConstraintValidatorContext context) {
if (valor == null) return false;
return valor.replaceAll("\\D", "").length() == 11;
}
}
🏆 Nível 4: Desafio Corporativo
Problema 04.4 — Agrupamento de Validações com Validation Groups
Contexto: Agrupamento de Validações com Validation Groups no contexto de Validação com Jakarta e Exception Handling Global.
Requisitos de Execução:
- Utilizar interfaces de grupo para aplicar regras distintas na criação (POST) e atualização (PUT).
Resultado Esperado
ID obrigatório apenas em grupo de atualização (OnUpdate.class).
📤 Instruções de Entrega (Microsoft Teams)
- Salve o arquivo como:
Atividade_04_4_SeuNome - Envie na tarefa:
Atividade Cap 04 - Validação com Jakarta e Exception Handling Global
🔑 Gabarito de Código & Solução Comentada
// Implementação de referência para o requisito do nível
// ValidationGroups.java
package com.empresa.api.validation;
public interface OnCreate {}
public interface OnUpdate {}
// Conclusão da operação e validação de conformidade
const statusConcluido = true;
console.log('Validação de execução concluída');
if (!statusConcluido) throw new Error('Falha');