30.11. Desenvolvendo APIs REST com Spring Boot: Validação de Dados com Bean Validation

Ao desenvolver APIs REST com o Spring Boot, uma das etapas cruciais é garantir que os dados recebidos pela sua aplicação estejam corretos e válidos. Isso é fundamental para a integridade dos dados e para a lógica de negócio da aplicação. O Spring Boot, juntamente com a especificação Bean Validation, fornece um conjunto robusto de ferramentas para validar objetos de forma declarativa. Nesta seção, vamos explorar como implementar a validação de dados em uma API REST com Spring Boot usando Bean Validation.

O que é Bean Validation?

Bean Validation é uma especificação do Java (JSR 380) que define um método para a validação de dados de forma padronizada e independente de framework. O Hibernate Validator é a implementação de referência desta especificação e é integrado por padrão no Spring Boot, facilitando a validação de beans (objetos Java) através de anotações.

Integrando Bean Validation com Spring Boot

Para começar a usar Bean Validation com Spring Boot, geralmente não é necessário adicionar nenhuma dependência adicional, pois o Spring Boot Starter já inclui o Hibernate Validator. No entanto, se precisar adicionar manualmente, você pode fazer isso no seu arquivo pom.xml (se estiver usando Maven) ou build.gradle (se estiver usando Gradle).

Exemplo de dependência Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Exemplo de dependência Gradle:

implementation 'org.springframework.boot:spring-boot-starter-validation'

Validando Objetos com Anotações

Com Bean Validation, você pode usar anotações para especificar restrições em campos de objetos. Essas anotações são colocadas diretamente nos atributos da classe que representa o objeto a ser validado. Algumas das anotações mais comuns incluem:

  • @NotNull: O campo não pode ser nulo.
  • @Min e @Max: Define o valor mínimo e máximo para um campo numérico.
  • @Size: Especifica o tamanho mínimo e máximo para strings ou coleções.
  • @Email: Valida se o campo contém um endereço de e-mail válido.
  • @Pattern: Valida o campo com uma expressão regular.

Exemplo de Classe com Validações:

import javax.validation.constraints.*;

public class UsuarioDTO {

    @NotNull(message = "O nome não pode ser nulo")
    @Size(min = 3, max = 50, message = "O nome deve ter entre 3 e 50 caracteres")
    private String nome;

    @Email(message = "Endereço de e-mail inválido")
    private String email;

    // Getters e Setters omitidos para brevidade
}

Ativando a Validação no Controller

Para ativar a validação no seu controller, você deve anotar o parâmetro do método do controller com @Valid ou @Validated. Isso informa ao Spring que o objeto deve ser validado antes de ser processado pelo método.

Exemplo de Método de Controller:

@RestController
@RequestMapping("/usuarios")
public class UsuarioController {

    @PostMapping
    public ResponseEntity<UsuarioDTO> criarUsuario(@Valid @RequestBody UsuarioDTO usuarioDTO) {
        // Lógica para salvar o usuário
        return ResponseEntity.status(HttpStatus.CREATED).body(usuarioDTO);
    }
}

Tratando Erros de Validação

Quando ocorre um erro de validação, o Spring gera uma exceção MethodArgumentNotValidException. Você pode tratar esses erros globalmente em sua aplicação usando um @ControllerAdvice e personalizar a resposta enviada ao cliente.

Exemplo de Classe de Tratamento de Erro:

@ControllerAdvice
public class GlobalExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<List<String>> handleValidationExceptions(MethodArgumentNotValidException ex) {
        List<String> errors = ex.getBindingResult()
            .getFieldErrors()
            .stream()
            .map(error -> error.getDefaultMessage())
            .collect(Collectors.toList());

        return ResponseEntity.badRequest().body(errors);
    }
}

Conclusão

Validar dados de entrada é uma prática essencial para qualquer API RESTful. Com o Spring Boot e Bean Validation, você pode facilmente adicionar validações declarativas aos seus objetos de transferência de dados (DTOs), garantindo que os dados recebidos estejam corretos antes de processá-los. Além disso, com o tratamento de exceções adequado, você pode fornecer aos clientes da sua API respostas úteis e informativas quando os dados de entrada não atenderem às expectativas.

Implementar validações é apenas uma parte do desenvolvimento de APIs REST com o Spring Boot, mas é uma parte importante que ajuda a manter a qualidade e a confiabilidade da sua aplicação. Ao seguir as práticas recomendadas e utilizar as ferramentas fornecidas pelo Spring Framework, você poderá criar APIs robustas e eficientes.

Agora responda o exercício sobre o conteúdo:

Qual das seguintes afirmações sobre a validação de dados em APIs REST com Spring Boot é correta?

Você acertou! Parabéns, agora siga para a próxima página

Você errou! Tente novamente.

Imagem do artigo Desenvolvendo APIs REST com Spring Boot: Manuseio de exceções e criação de respostas customizadas 137

Próxima página do Ebook Gratuito:

Desenvolvendo APIs REST com Spring Boot: Manuseio de exceções e criação de respostas customizadas

Tempo estimado de leitura: 5 minutos

Baixe o app para ganhar Certificação grátis e ouvir os cursos em background, mesmo com a tela desligada.

+ de 9 milhões
de alunos

Certificado grátis e
válido em todo o Brasil

60 mil exercícios
gratuitos

4,8/5 classificação
nas lojas de apps

Cursos gratuitos em
vídeo, ebooks e audiobooks