Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Exemplo do handleHttpMessageNotReadable para cada tipo de dado

Olá estou com uma forte dúvida em como validar o json da requisição. O que eu tenho até agora é:

  • Eu sei que tenho que dá extends na classe ResponseEntityExceptionHandler
  • dá Override no método handleHttpMessageNotReadable

Mas não consigo formular um código que valide se:

  • O campo deve ser inteiro
  • O campo deve ser string
  • O campo deve ser uma lista

Alguém poderia me dá o exemplo mais usado para isso? que eu consiga validar todos os tipos de dados de um request e que ao mesmo tempo o código n fique extremamente giganteee!

Help please hahahaha

8 respostas

Oi!

Isso seria validação das informações chegando na API, que é mostrado no primeiro curso: https://cursos.alura.com.br/course/spring-boot-3-desenvolva-api-rest-java/task/115962

A parte do Bean Validation eu consegui implementar, o problema é quando eu mando, por exemplo, uma string em um campo que requer um inteiro, daí o spring retorna o 403 e no console solta handleHttpMessageNotReadableException, eu queria tratar esse tipo erro pra cada tipo de dado no body. Mandando um 400 e uma mensagem amigavel para cada tipo de erro. Por exemplo:

{
"errors": [
    "idUsuario": "o campo deve ser inteiro"
]
}

obs: segue o erro que dá no console:

.w.s.m.s.DefaultHandlerExceptionResolver : Resolved [org.springframework.http.converter.HttpMessageNotReadableException: JSON parse error: Cannot deserialize value of type...

Então seria a parte de tratamento de erros.

Veja aqui a classe de tratamento de erros com mais tratamentos: https://cursos.alura.com.br/course/spring-boot-aplique-boas-praticas-proteja-api-rest/task/125341

essa é a mensagem que solta tratando só com o ex.getMessage( ):

JSON parse error: Cannot deserialize value of type `java.lang.Long` from String "string": not a valid `java.lang.Long` value

tem alguma forma de traduzir ou deixar mais amigavel e direta? Por exemplo:

  • "o campo deve ser inteiro
  • "o campo deve ser uma lista"
  • "o campo deve ser uma string"

tipo no handleMethodArgumentNotValid que a gente consegue pegar cada campo e associar a uma mensagem de error em português

Pior que sempre será a mesma exception que vai ser lançada, sendo que a String dela é que vai variar. então você teria que fazer if/else ou switch/case se quiser devolver uma mensagem distinta para cada possibilidade.

mas esse tipo de tratamento é comum no Java? ou geralmente não há esse tratamento? e deixa para a parte do cliente fazer essa validação?

solução!

Geralmente apenas devolve a mensagem padrão da exception mesmo e o cliente que disparou a requisição faz o alerta ao usuário.

Ataaaa entendi agora, muitoooo obrigado Rodrigo!