36 - Formatar validações

Nesta aula, vamos aprender como formatar as validações no Spring Boot para que, quando ocorrerem erros de validação, possamos retornar uma resposta personalizada com o status adequado.

Para isso, utilizamos a anotação @RestControllerAdvice e o tratamento de exceções específicas, como a MethodArgumentNotValidException, para capturar e formatar os erros de validação.

Estrutura do Código

O código a seguir mostra como tratamos as exceções de validação e retornamos uma resposta customizada quando ocorrem erros de validação nos parâmetros de entrada:


package br.com.api.pessoa.configuracao;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.HashMap;
import java.util.Map;

@RestControllerAdvice
public class ValidarRequisicoes {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseStatus(HttpStatus.BAD_REQUEST)
    public ResponseEntity> handleValidationExceptions(MethodArgumentNotValidException ex) {

        Map errors = new HashMap<>();

        ex.getBindingResult().getAllErrors().forEach(error -> {

            String fieldName = ((FieldError) error).getField();
            String errorMessage = error.getDefaultMessage();

            errors.put(fieldName, errorMessage);
        });

        return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST);
    }
}
    

Explicação do Código

A classe ValidarRequisicoes é um componente especial que se aplica a todas as exceções de validação que podem ocorrer nos controladores REST da aplicação. Quando um erro de validação ocorre, o método handleValidationExceptions é acionado.

Esse método captura a exceção MethodArgumentNotValidException, que é lançada quando há erro nos parâmetros enviados para um método de controlador. Dentro do método, criamos um mapa para armazenar os erros de validação, onde a chave é o nome do campo e o valor é a mensagem de erro.

Personalizando a Resposta

Ao final, a resposta com o status HTTP 400 (Bad Request) é retornada com os erros de validação em formato de mapa. Isso garante que, quando o cliente faz uma requisição inválida, ele recebe informações detalhadas sobre os campos que falharam na validação.

Benefícios

Essa abordagem permite que a aplicação seja mais robusta ao lidar com entradas inválidas, proporcionando uma experiência melhor para os desenvolvedores que consomem a API, pois eles recebem mensagens claras sobre o que está errado com os dados fornecidos.

Clique aqui para se tornar membro do canal

Abaixo segue nossa aula no YouTube: