Your Web News in One Place

Help Webnuz

Referal links:

Sign up for GreenGeeks web hosting
January 12, 2023 08:36 pm GMT

Um Projeto Spring Boot - P5.3

Fala pessoal!

Mais um tutorial sobre Rest API em Java com Spring Boot chegando. E hoje vou falar um pouco sobre validaes e tratamento de excees.

Adicionando validao nos campos

Algo que no queremos so erros de exceo gerados no banco de dados por causa de valores que foram enviados de forma incorreta (p.e. null, "" ou email invlido) ou que excedem o tamanho mximo da coluna.

Ento, antes desses dados serem salvos no banco, preciso valid-los e ai para iniciarmos as validaes vamos instalar o Validation:

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

A segunda coisa a se fazer adicionar anotaes pertinentes aos campos da classe de editora como @NotBlank nos itens que no podem ser nulos e nem vazios e @Size (max = value) para validar se o item possui tamanho equivalente a column no banco de dados.

A documentao do Bean Validation possui diversas anotaes teis, como por exemplo de e-mail, vale pena dar uma conferida.

A classe de Editora ficou assim:
model de editora

J o ltimo passo inserir a anotao @Valid nos mtodos de POST e PUT l no controlador:

methods POST and PUT

E pronto, a validao de Editora est pronta.

Testando a aplicao, quando enviado um request com todos os dados corretos temos:
post ok

  • retorno do que foi cadastrado + id;
  • status = 201

J quando algum item no foi enviado corretamente, temos um response gigante com vrias informaes:

error send request

O principal (o que considero) nessa mensagem :

  • status = 400;
  • um defaultMessage com o motivo do erro;
  • um field com o nome do campo de erro;
  • a data e hora que ocorreu o erro.

BNUS: Formatando o retorno das excees

Um bnus para voc sobre como formatar o retorno das excees ao endpoint:

P1

  • criar uma classe para o tratamento de excees e extender a classe ResponseEntityExceptionHandler

  • a minha classe se chama ApiExceptionsHandler e est no pacote library.api.exception

  • utilizar a anotao @ControllerAdvice que, de forma simples, passa a ideia de que a classe um componente Spring com o objetivo de tratar excees globalmente.

  • puxar o mtodo handleMethodArgumentNotValid

  • esse mtodo chamado quando ocorre algum erro que precisa ser retornado ao endpoint. Ele recebe 4 parmetros:

  1. a exceo
  2. o cabealho
  3. o status e
  4. o que foi recebido pela API
  • com relao ao retorno do mtodo escolhi o handleExceptionInternal porque ele permite retornar um objeto do tipo Object e ai esse objeto que ser a mensagem de retorno da API.

class api exceptions

P2

  • criar uma classe Field dentro do pacote library.api.exception com atributos field (String) e mensage (String)

  • adicionar as anotaes do Lombok @AllArgsConstructor e @Getter

class field

  • criar a classe Error dentro do pacote library.api.exception
    e adicionar os objetos status (int), dateTime (LocalDateTime), title (String), listFields ()

  • adicionar as anotaes Lombok @Getter e @Setter

class api error

P3

  • instanciar um array list do tipo Field na classe ApiExceptionHandler.

preciso percorrer o objeto ex e para cada erro apontado pela API, pegar qual o campo que est com o erro e qual foi a defaultMessage dele. Cada item da lista de exceptions um ObjectError e pra conseguir pegar o field preciso do cast do tipo FieldError. Com isso, uma das possibilidades dese fazer isso com o seguinte cdigo:

for (ObjectError error : ex.getBindingResult().getAllErrors()) {    String field = ((FieldError) error).getField();    String message = error.getDefaultMessage();    fields.add(new Field(field, message));}
  • na classe ApiExceptionHandler instanciar um objeto Error e setar os valores

a. status = status.value();
b. dateTime = LocalDateTime.now();
c. title = "Um ou mais campos com preenchimento invlido.";
d. listFields = o array populado anteriormente.

  • retornar o erro formatado:return handleExceptionInternal(ex, error, headers, status, request);

class api exceptions handler

Com isso temos o resultado:

  • 1 erro:
    result class api exception handler

  • mais de 1 erro:

2 result class api exception handler

Por hoje isso!

O link do repositrio no GH:

Espero que tenha gostado, curte, compartilha e deixa ttua opinio.

At mais!


Original Link: https://dev.to/devs-jequie/um-projeto-spring-boot-p53-39oj

Share this article:    Share on Facebook
View Full Article

Dev To

An online community for sharing and discovering great ideas, having debates, and making friends

More About this Source Visit Dev To