我遇到的问题是,当将对象封送到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["_embedded"]);
nested exception is com.fasterxml.jackson.databind.JsonMappingException: Infinite recursion
我对任何指针感到高兴。
答案 0 :(得分:0)
你使用的是哪个Jackson版本?杰克逊2.2.3没有这个问题。它会自动照顾