Search code examples
javaspringspring-mvcjacksonbidirectional-relation

Spring @ResponseBody Json Cyclic Reference


I am trying to use Spring 3.x @ResponseBody to generate json/xml response, I am using JPA 2.0 ORM when there is many-many relation b/w tables then json is throwing LazyInitializationException

If I give "eager fetch" then it is going into cyclic reference.


Solution

  • I recently encountered a similar problem: Jackson - serialization of entities with birectional relationships (avoiding cycles)

    So the solution is to upgrade to Jackson 2.0, and add to classes the following annotation:

    @JsonIdentityInfo(generator = ObjectIdGenerators.IntSequenceGenerator.class, 
                      property = "@id")
    public class SomeEntityClass ...
    

    Then the problem is that Spring doesn't work with Jackson 2.0. This has been solved in the following way:

    <bean id="jacksonMessageConverter"
              class="own.implementation.of.MappingJacksonHttpMessageConverter"/>
    
    <bean class="org.springframework.web.servlet.mvc
                 .annotation.AnnotationMethodHandlerAdapter">
            <property name="messageConverters">
                <list>
                    <ref bean="jacksonMessageConverter"/>
                </list>
            </property>
            <property name="requireSession" value="false"/>
        </bean>
    

    And the own.implementation.of.MappingJacksonHttpMessageConverter is based on this:

    http://www.jarvana.com/jarvana/view/org/springframework/spring-web/3.0.0.RELEASE/spring-web-3.0.0.RELEASE-sources.jar!/org/springframework/http/converter/json/MappingJacksonHttpMessageConverter.java?format=ok

    But use ObjectMapper and other Jackson classes from Jackson 2.0 instead of Jackson 1.*