【问题标题】:Too many depths in REST result for self relationship of spring-data-neo4jspring-data-neo4j 自身关系的 REST 结果深度过多
【发布时间】:2016-07-08 17:10:04
【问题描述】:

我有一个自我关系(一个员工可以向一个经理汇报,一个经理可能有很多员工)如下:

@NodeEntity
public class Employee {

    @GraphId
    private Long id;

    private String name;
    private String sn;
    private String mail;

    public Employee() {
        super();
    }

    public Employee(String name, String sn, String mail) {
        super();
        this.name = name;
        this.sn = sn;
        this.mail = mail;
    }

    @Relationship(type="REPORT_TO", direction=Relationship.OUTGOING)
    private Employee manager;

    @Relationship(type="REPORT_TO", direction=Relationship.INCOMING)
    private Set<Employee> staffs = new HashSet<>();

    ...
}

我使用 REST API 作为我的应用程序的接口。当我尝试使用session.loadAll(Employee.class, 0) 返回所有员工时,似乎一切正常,但不会显示任何经理或员工信息。另一方面,如果我使用session.loadAll(Employee.class, 0),则会返回许多深度的Employee。

例如,如果员工 A 向员工 B 报告,即。 B 是 A 的经理。深度 0 的结果是:

{ "_embedded" : { "employees" : [ { "name" : "B", "sn" : "10001", "mail" : "B@test.com", "manager" : null, "staffs" : [ ], }, { "name" : "A", "sn" : "10000", "mail" : "A@test.com", "manager" : null, "staffs" : [ ], } ] } ... }

虽然深度 1 的结果是: [{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com","manager":{"id":8,"name":"B","sn":"10001","mail":"B@test.com","manager":null,"staffs":[{"id":9,"name":"A","sn":"10000","mail":"A@test.com",...

我该如何处理这个案子?谁能给我一些建议,拜托。

【问题讨论】:

  • 这是 OGM loadAll 查询的结果还是通过您的 rest api 序列化的结果 Employee?

标签: rest neo4j spring-data-neo4j neo4j-ogm


【解决方案1】:

这是一个 JSON 序列化问题。实体包含循环引用,序列化程序无法检测到它们,因此它进入构造 JSON 对象的无限循环。你可以试试JSOG Jackson 插件,它能够检测并自动处理此类问题。有关如何在 Spring 项目中使用它的示例,请查看 SDN University

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 2020-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多