当前位置: 首页 > 知识库问答 >
问题:

Neo4j RelationshipEntities和Spring数据Rest的循环JSON序列化问题

夹谷腾
2023-03-14

我有一个通过Spring Data Rest序列化@关系实体到JSON的问题。每当我创建@关系实体时,我都会在将图序列化到JSON时遇到无限递归。

使用JSOG试图呈现图形只会导致不同的、格式错误的JSON响应。

虽然我可以通过使用@JsonManaged参考来避免这个问题,但它不能解决这个问题,因为我想从两个节点公开关系。

我已经创建了一个简单的应用程序来展示这个问题。可以在这里找到:https://github.com/cyclomaniac/neo4j-spring-data-rest-cyclic

它通过一个关系实体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;

    ...

玩家位置:

@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;

   ...

当连接到GraphRespository时,点击/teamsendpoint会在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

我的假设是,我选择了一种糟糕的方式来实现这段关系,尽管这感觉相当简单。如果能从团队节点和玩家节点上获得关于如何正确公开这种关系的任何提示,我将不胜感激,最好是通过SpringDataREST。

共有1个答案

宇文智敏
2023-03-14

尝试使用@JsonIgnore或pair进行注释:@JsonBackReference和@JsonManagedReference

 类似资料:
  • 对于某些用例,我需要将一个POJO转换为另一个具有不同字段名称的POJO。我试着使用Jackson对象映射器。它在某些方面起了作用。然而,最终的结果并不是我所期望的。 如果运行,输出将是: SOUT:UserMap{name_new='Deepak',meta=address::Singapore,id::111} 杰克逊:{“姓名”:“迪帕克”,“地址”:“新加坡”,“身份证”:“111”} 我

  • 我有一个没有Spring Boot的项目,但它使用了一些Spring模块,如“spring data”和“spring data rest”。 我对java.time.*的序列化有一些问题领域。我找到了一些类似这样的教程,但即使我添加了以下依赖项 以及我的RepositoryRestConfigurerAdapter中的以下代码 } 我对java.time字段的实际回答如下 "rateDate"

  • 在使用Spring MVC的REST api中,如果我想将可以作为超文本传输协议GET请求参数传递的字符串值限制为以下参数之一 价值A价值B 我认为我应该在java中使用枚举类型。 然而,这只处理Enum的序列化。当我在Spring控制器中接收作为请求Param时,会出现,因为 我已经阅读了下面的文章https://www.baeldung.com/spring-enum-request-para

  • json 序列化, long->string. 怎么让restcontroller (web 前端调用用的), 转string 内部服务之间 feign接口 不转 。 现在有的feign 接口 直接复用的restcontroller

  • 我正在努力学习颤振,但我在JSON序列化上被卡住了。我在YouTube和Flitter文档中学习了一些教程,但我在序列化方面遇到了一些困难。你能帮我一点忙吗,这是为了教育目的,所以我更感兴趣的是背后的理论,而不是解决方案本身,然而,即使只有解决方案,我认为我可以尝试理解这个过程。我应该提到,我知道这一点,但在我的例子中,数据中有嵌套对象,这让我感到困惑。 作为响应数据的样本,它基本上是一个商店,每

  • 问题内容: 我在流程之前有这个: 然后在另一部分 为什么我收到ClassCastException? 问题答案: 最终我以这种方式工作: