4
respostas

Requisição infinita

Estou fazendo os mesmos passos da aula, mas meu json repete o ultimo pedido eternamente.

No console, da uma exceção, e mostra seguinte erro:

2021-02-19 15:51:02.907 ERROR 2600 --- [nio-8080-exec-6] s.e.ErrorMvcAutoConfiguration$StaticView : Cannot render error page for request [/api/pedidos/aguardando] and exception [Could not write JSON: Infinite recursion (StackOverflowError); nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverf
4 respostas

Fiz alguns testes, e a lista retornada do banco de dados, possui tamanho 2

Segue abaixo o inicio do json mostrado no browser

[
{
"id": 10,
"nomeProduto": "Guitarra",
"valorNegociado": 600,
"dataEntrega": "2021-02-18",
"urlProduto": "https://www.amazon.com.br/Guitarra-Stratocaster-Benson-Madero-Natural/dp/B07WFV4BZW",
"urlImagem": "https://images-na.ssl-images-amazon.com/images/I/714cXjO4jXL._AC_SL1500_.jpg",
"descricao": "Descrição As guitarras Benson, Edición Madero são fabricadas na Argentina, construídas à mão com madeiras de carvalho branco sólido (não laminado), da Cordilheira dos Andes e da Patagônia ao sul da Argentina, feitas de forma artesanal, reguladas, testadas e afinadas, uma a uma, por uma equipe profissional de luthiers, com toda dedicação e cuidado que um instrumento diferenciado merece, garantindo assim o timbre marcante de nossos instrumentos.",
"user": {
"username": "maria",
"password": "$2a$10$s6ZVO1CgSTNJ9XPJJNKPg.H9kYKLsruN52R4QZYZTKzghm8.C25zG",
"enabled": true,
"pedidos": [
{
"id": 1,
"nomeProduto": "Iphone 11",
"valorNegociado": 10000,
"dataEntrega": "2021-02-15",
"urlProduto": "https://www.amazon.com.br/Celular-Apple-iPhone-64gb-Tela/dp/B07XS2ZR1K",
"urlImagem": "https://images-na.ssl-images-amazon.com/images/I/71iO2R%2BCLjL._AC_SL1500_.jpg",
"descricao": "A tela do iPhone 11 tem bordas arredondadas que se ajustam ao design curvo do telefone dentro da sua forma retangular. Quando medida como um retângulo, a tela tem 6,06 polegadas na diagonal. A área real de visualização é menor.",
"user": {
"username": "maria",
"password": "$2a$10$s6ZVO1CgSTNJ9XPJJNKPg.H9kYKLsruN52R4QZYZTKzghm8.C25zG",
"enabled": true,
"pedidos": [
{
"id": 1,
"nomeProduto": "Iphone 11",
"valorNegociado": 10000,
"dataEntrega": "2021-02-15",
"urlProduto": "https://www.amazon.com.br/Celular-Apple-iPhone-64gb-Tela/dp/B07XS2ZR1K",
"urlImagem": "https://images-na.ssl-images-amazon.com/images/I/71iO2R%2BCLjL._AC_SL1500_.jpg",
"descricao": "A tela do iPhone 11 tem bordas arredondadas que se ajustam ao design curvo do telefone dentro da sua forma retangular. Quando medida como um retângulo, a tela tem 6,06 polegadas na diagonal. A área real de visualização é menor.",
"user": {
"username": "maria",
"password": "$2a$10$s6ZVO1CgSTNJ9XPJJNKPg.H9kYKLsruN52R4QZYZTKzghm8.C25zG",
"enabled": true,
"pedidos": [
{
"id": 1,
"nomeProduto": "Iphone 11",
"valorNegociado": 10000,
"dataEntrega": "2021-02-15",
"urlProduto": "https://www.amazon.com.br/Celular-Apple-iPhone-64gb-Tela/dp/B07XS2ZR1K",
"urlImagem": "https://images-na.ssl-images-amazon.com/images/I/71iO2R%2BCLjL._AC_SL1500_.jpg",
"descricao": "A tela do iPhone 11 tem bordas arredondadas que se ajustam ao design curvo do telefone dentro da sua forma retangular. Quando medida como um retângulo, a tela tem 6,06 polegadas na diagonal. A área real de visualização é menor.",
"user": {
"username": "maria",
"password": "$2a$10$s6ZVO1CgSTNJ9XPJJNKPg.H9kYKLsruN52R4QZYZTKzghm8.C25zG",
"enabled": true,
"pedidos": [
{
"id": 1,
"nomeProduto": "Iphone 11",
"valorNegociado": 10000,
"dataEntrega": "2021-02-15",
"urlProduto": "https://www.amazon.com.br/Celular-Apple-iPhone-64gb-Tela/dp/B07XS2ZR1K",
"urlImagem": "https://images-na.ssl-images-amazon.com/images/I/71iO2R%2BCLjL._AC_SL1500_.jpg",
"descricao": "A tela do iPhone 11 tem bordas arredondadas que se ajustam ao design curvo do telefone dentro da sua forma retangular. Quando medida como um retângulo, a tela tem 6,06 polegadas na diagonal. A área real de visualização é menor.",
"user": {
"username": "maria",
"password": "$2a$10$s6ZVO1CgSTNJ9XPJJNKPg.H9kYKLsruN52R4QZYZTKzghm8.C25zG",
"enabled": true,
"pedidos": [
{
"id": 1,
"nomeProduto": "Iphone 11",
"valorNegociado": 10000,
"dataEntrega": "2021-02-15",
"urlProduto": "https://www.amazon.com.br/Celular-Apple-iPhone-64gb-Tela/dp/B07XS2ZR1K",
"urlImagem": "https://images-na.ssl-images-amazon.com/images/I/71iO2R%2BCLjL._AC_SL1500_.jpg",
"descricao": "A tela do iPhone 11 tem bordas arredondadas que se a

consegui resolver graças a esta publicação: https://stackoverflow.com/questions/3325387/infinite-recursion-with-jackson-json-and-hibernate-jpa-issue#answer-18288939

mas gostaria de saber: o que aconteceu? por que deu este erro??

Olá Gabriel, tudo bem?

O erro "Infinite recursion" ocorre quando há uma referência circular entre objetos sendo serializados em JSON. Isso pode ocorrer quando uma entidade tem um relacionamento bidirecional com outra entidade, e ambas estão sendo serializadas.

Esse tipo de erro geralmente ocorre quando há uma referência circular entre objetos. Por exemplo, se um objeto A tem uma referência para um objeto B, e o objeto B tem uma referência para o objeto A, isso pode causar uma recursão infinita ao tentar serializar esses objetos em JSON.

Para resolver esse problema, você pode tentar utilizar a anotação @JsonIgnore em uma das propriedades que está causando a referência circular. Essa anotação indica que a propriedade deve ser ignorada durante a serialização em JSON.

Outra opção é utilizar a anotação @JsonManagedReference em uma das propriedades e a anotação @JsonBackReference na outra propriedade que faz referência de volta. Essas anotações indicam que a propriedade com a anotação @JsonManagedReference deve ser serializada normalmente, enquanto a propriedade com a anotação @JsonBackReference deve ser ignorada durante a serialização.

Como você já resolveu o problema, provavelmente havia uma referência circular em algum dos objetos da lista de pedidos retornada pelo banco de dados. A solução do link enviado envolve a configuração do Jackson ObjectMapper para ignorar propriedades que possam causar referências circulares, o que resolve o problema.

Espero ter ajudado e bons estudos!