Best way of handling Jackson bi-directional references





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







1















I'm trying to build rest APIs for our core components using Jackson, and I had issues with some of the objects getting this exception:




javax.ws.rs.ProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)




After searching I came out to know about several ways how to solve it.
e.g.
https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion



and I used the @JsonIdentityInfo which is working fine for me, but the question is WHAT IS THE BETTER WAY TO DO IT?



In this post:
Infinite Recursion with Jackson JSON and Hibernate JPA issue



There is a claim that need to use the @JsonIdentityInfo in caution cause it can cause problems:




In this case you've got to be careful, since you could need to read your object's attributes more than once (for example in a products list with more products that share the same seller), and this annotation prevents you to do so. I suggest to always take a look at firebug logs to check the Json response and see what's going on in your code.




I reached this article as well: http://springquay.blogspot.com/2016/01/new-approach-to-solve-json-recursive.html



@JsonIdentityInfo



I understood that @JsonIdentityInfo is newer approach in Jackson 2.



Advantage that it requires minimum code change (just to put this annotation in the problematic Object Model and no need to handle it from the other side.



A drawback is explained



@JsonIgnoreProperties
It requires to change more classes rather than just annotating the base one, and I'm not sure how it will will work if I have more than one class inheriting from that object model.










share|improve this question





























    1















    I'm trying to build rest APIs for our core components using Jackson, and I had issues with some of the objects getting this exception:




    javax.ws.rs.ProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)




    After searching I came out to know about several ways how to solve it.
    e.g.
    https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion



    and I used the @JsonIdentityInfo which is working fine for me, but the question is WHAT IS THE BETTER WAY TO DO IT?



    In this post:
    Infinite Recursion with Jackson JSON and Hibernate JPA issue



    There is a claim that need to use the @JsonIdentityInfo in caution cause it can cause problems:




    In this case you've got to be careful, since you could need to read your object's attributes more than once (for example in a products list with more products that share the same seller), and this annotation prevents you to do so. I suggest to always take a look at firebug logs to check the Json response and see what's going on in your code.




    I reached this article as well: http://springquay.blogspot.com/2016/01/new-approach-to-solve-json-recursive.html



    @JsonIdentityInfo



    I understood that @JsonIdentityInfo is newer approach in Jackson 2.



    Advantage that it requires minimum code change (just to put this annotation in the problematic Object Model and no need to handle it from the other side.



    A drawback is explained



    @JsonIgnoreProperties
    It requires to change more classes rather than just annotating the base one, and I'm not sure how it will will work if I have more than one class inheriting from that object model.










    share|improve this question

























      1












      1








      1








      I'm trying to build rest APIs for our core components using Jackson, and I had issues with some of the objects getting this exception:




      javax.ws.rs.ProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)




      After searching I came out to know about several ways how to solve it.
      e.g.
      https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion



      and I used the @JsonIdentityInfo which is working fine for me, but the question is WHAT IS THE BETTER WAY TO DO IT?



      In this post:
      Infinite Recursion with Jackson JSON and Hibernate JPA issue



      There is a claim that need to use the @JsonIdentityInfo in caution cause it can cause problems:




      In this case you've got to be careful, since you could need to read your object's attributes more than once (for example in a products list with more products that share the same seller), and this annotation prevents you to do so. I suggest to always take a look at firebug logs to check the Json response and see what's going on in your code.




      I reached this article as well: http://springquay.blogspot.com/2016/01/new-approach-to-solve-json-recursive.html



      @JsonIdentityInfo



      I understood that @JsonIdentityInfo is newer approach in Jackson 2.



      Advantage that it requires minimum code change (just to put this annotation in the problematic Object Model and no need to handle it from the other side.



      A drawback is explained



      @JsonIgnoreProperties
      It requires to change more classes rather than just annotating the base one, and I'm not sure how it will will work if I have more than one class inheriting from that object model.










      share|improve this question














      I'm trying to build rest APIs for our core components using Jackson, and I had issues with some of the objects getting this exception:




      javax.ws.rs.ProcessingException: com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion (StackOverflowError)




      After searching I came out to know about several ways how to solve it.
      e.g.
      https://www.baeldung.com/jackson-bidirectional-relationships-and-infinite-recursion



      and I used the @JsonIdentityInfo which is working fine for me, but the question is WHAT IS THE BETTER WAY TO DO IT?



      In this post:
      Infinite Recursion with Jackson JSON and Hibernate JPA issue



      There is a claim that need to use the @JsonIdentityInfo in caution cause it can cause problems:




      In this case you've got to be careful, since you could need to read your object's attributes more than once (for example in a products list with more products that share the same seller), and this annotation prevents you to do so. I suggest to always take a look at firebug logs to check the Json response and see what's going on in your code.




      I reached this article as well: http://springquay.blogspot.com/2016/01/new-approach-to-solve-json-recursive.html



      @JsonIdentityInfo



      I understood that @JsonIdentityInfo is newer approach in Jackson 2.



      Advantage that it requires minimum code change (just to put this annotation in the problematic Object Model and no need to handle it from the other side.



      A drawback is explained



      @JsonIgnoreProperties
      It requires to change more classes rather than just annotating the base one, and I'm not sure how it will will work if I have more than one class inheriting from that object model.







      jackson jsonidentityinfo infinite-recursion






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 26 '18 at 14:50









      zbeedatmzbeedatm

      8010




      8010
























          0






          active

          oldest

          votes












          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53483656%2fbest-way-of-handling-jackson-bi-directional-references%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53483656%2fbest-way-of-handling-jackson-bi-directional-references%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Wiesbaden

          Marschland

          Dieringhausen