У меня возникла проблема с сериализацией @RelationshipEntities в JSON через Spring Data Rest. Всякий раз, когда я создаю @RelationshipEntity, я запускаю бесконечную рекурсию при сериализации графика для JSON.Neo4j RelationshipEntities и циклическая проблема сериализации JSON с запасом данных Spring
Использование JSOG для рендеринга графика приводит только к другому, некорректному ответу JSON.
Хотя я могу избежать проблемы с помощью @JsonManagedReference, она не решает проблему, поскольку я хотел бы разоблачить отношения с обоих узлов.
Я создал простое приложение, которое демонстрирует проблему. Его можно найти здесь: https://github.com/cyclomaniac/neo4j-spring-data-rest-cyclic
Он реализует основные базовые команды и игроки NodeEntities с помощью Single RelationshipEntity, PlayerPosition.
игрока:
@NodeEntity
@JsonIdentityInfo(generator= JSOGGenerator.class)
public class Player {
@GraphId
@JsonProperty("id")
private Long id;
private String name;
private String number;
@Relationship(type = "PLAYS_ON")
private PlayerPosition position;
...
Команда:
@NodeEntity
@JsonIdentityInfo(generator= JSOGGenerator.class)
public class Team {
@GraphId
@JsonProperty("id")
private Long id;
private String name;
@Relationship(type = "PLAYS_ON", direction = Relationship.INCOMING)
Set<PlayerPosition> teamPlayers;
...
PlayerPosition:
@RelationshipEntity(type="PLAYS_ON")
@JsonIdentityInfo(generator= JSOGGenerator.class)
public class PlayerPosition {
@GraphId
@JsonProperty("id")
private Long id;
private String position;
@StartNode
private Player player;
@EndNode
private Team team;
...
Когда подключены до GraphRepository, попав/команды оконечных результаты в следующие выходные с JSOG на месте:
{
"_embedded" : {
"teams" : [ {
"@id" : "1",
"name" : "Cubs",
"teamPlayers" : [ {
"@id" : "2",
"position" : "Catcher",
"player" : {
"@id" : "3"
Обратите внимание, что JSON заканчивается преждевременно. Сервер генерирует исключение:
2016-11-04 15:48:03.495 WARN 12287 --- [nio-8080-exec-1] .w.s.m.s.DefaultHandlerExceptionResolver : Failed to write HTTP message:
org.springframework.http.converter.HttpMessageNotWritableException:
Could not write content: Can not start an object,
expecting field name; nested exception is
com.fasterxml.jackson.core.JsonGenerationException:
Can not start an object, expecting field name
Мое предположение, что я выбрал плохой способ реализации отношений, хотя он чувствует себя довольно просто. Я был бы признателен за любые советы о том, как я могу правильно разоблачить эти отношения, в идеале, с помощью Spring Data Rest, как из узлов Team, так и из Player.