Spring Rest,JsonManagedReferences和循环引用

时间:2015-07-23 10:58:14

标签: spring rest spring-boot spring-hateoas

我遇到的问题是,当将对象封送到Json时,使用@JsonManagedReferences@JsonBackReference不会打破无限递归循环。

我知道我可以尝试避免双向关系,但这不会很好。另一个不理想的解决方案是删除@RestResource(exported=false)注释并按照提供的链接进行一次。

一个例子是:

@JsonManagedReference   
@ManyToOne(cascade=CascadeType.ALL)
@RestResource(exported=false)
@JoinColumn(name="organisation_id")
private Organisation organisation;

与另一个班级的对手:

@JsonBackReference
@OneToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinColumn(name ="organisation_id")
@RestResource(exported=false)
@Fetch(value = FetchMode.SUBSELECT)
private Set<OrganisationUnit> organisationUnits;

Bot类的@RepositoryRestResource没有任何特殊之处。

@RepositoryRestResource
public interface OrganisationRepository extends JpaRepository<Organisation, Long> {

    public final static String ID_QUERY = "SELECT u FROM Organisation u where u.id=:objectId";

    @Query(ID_QUERY)
    public Organisation findObjectById(@Param("objectId") Long objectId);}

我知道杰克逊2应该能够应对各种情况,但在这种情况下,它无法解决问题。这是我不知道的已知行为吗? 请告诉我任何明显的缺陷,因为我没有使用JPA,Hibernate或Spring的经验。

提供的错误消息是:

There was an unexpected error (type=Internal Server Error, status=500). Could not write content: Infinite recursion (StackOverflowError) (through reference chain: org.springframework.hateoas.PagedResources[&quot;_embedded&quot;]);
nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion

我对任何指针感到高兴。

1 个答案:

答案 0 :(得分:0)

你使用的是哪个Jackson版本?杰克逊2.2.3没有这个问题。它会自动照顾