Java 带有spring数据的Neo4j-用@GraphId标记的暴露字段

Java 带有spring数据的Neo4j-用@GraphId标记的暴露字段,java,neo4j,spring-data-neo4j-4,Java,Neo4j,Spring Data Neo4j 4,我尝试将neo4j与spring data@RepositoryRestResource一起使用,但在返回的json中没有“id”字段。如何改变这种行为 示例输出: { "_embedded" : { "movies" : [ { "name" : "movie1", }, ... } 我的实体: @NodeEntity public class Movie { @GraphId Long id; String name;

我尝试将neo4j与spring data@RepositoryRestResource一起使用,但在返回的json中没有“id”字段。如何改变这种行为

示例输出:

{
  "_embedded" : {
    "movies" : [ {
      "name" : "movie1",
     },
   ...
}
我的实体:

@NodeEntity
public class Movie {

    @GraphId
    Long id;

    String name;

    // getters and setters omitted for brevity
}
我的回购协议:

@RepositoryRestResource(collectionResourceRel = "movies", path = "movies")
public interface MovieRepo extends GraphRepository<Movie> { }
@RepositoryRestResource(collectionResourceRel=“movies”,path=“movies”)
公共接口MovierPO扩展了GraphRespository{}

这似乎是Spring数据REST的默认设置。下面列出的配置帮助,id在JSON中可见

@Component
public class SpringDataRestCustomization extends RepositoryRestConfigurerAdapter {

    @Override
    public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
        config.exposeIdsFor(Movie.class);
    }
}

我还注意到@RestController的工作方式不同,总是打印id,不管它是否在配置中公开,可能是因为它不是Spring数据REST包的一部分。

您可能需要重新考虑在REST响应中公开基于Neo4j的id。。。SDR创建者在默认情况下不包括实体id,这可能是一个原因

对于Neo4j,从应用程序视图来看,公开和使用Neo4j内部id是安全的,因为应用程序中的任何内容都不会因使用它们而中断

这就是说,Neo4j内部id被回收,我的意思是,如果一个节点或关系的内部id为12345,并且在某个点上该节点或关系被删除,那么12345的id将有资格被未来的节点或关系重用。我认为,明智的做法是假设新的可用id将在将来某个时候重新使用。这有消极的副作用,即Neo4j内部id不被认为是“稳定的”,不应在应用程序之外使用


作为一个新代理密钥的示例,我将向您介绍GraphAware的neo4j uuid项目。此Neo4j插件可用于在所有节点和关系上自动创建唯一且稳定的UUID,这些节点和关系不会也不能更改或更新。

您使用的SDN和SR-REST版本是什么?