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:

  1. Aplicar @NotBlank, @Size, @Positive e @Email em DTO e habilitar validação com @Valid.

Resultado Esperado

DTO com validação declarativa jakarta.validation.constraints.

📤 Instruções de Entrega (Microsoft Teams)

  1. Salve o arquivo como: Atividade_04_1_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_04_2_SeuNome
  2. 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:

  1. Criar anotação customizada @CpfValido e 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)

  1. Salve o arquivo como: Atividade_04_3_SeuNome
  2. 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:

  1. 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)

  1. Salve o arquivo como: Atividade_04_4_SeuNome
  2. 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');