我尝试将neo4j与spring数据@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> { }
答案 0 :(得分:0)
它似乎是Spring Data REST的默认设置。下面列出的配置有帮助,id在JSON中可见。
@Component
public class SpringDataRestCustomization extends RepositoryRestConfigurerAdapter {
@Override
public void configureRepositoryRestConfiguration(RepositoryRestConfiguration config) {
config.exposeIdsFor(Movie.class);
}
}
我还注意到@RestController的工作方式不同并且始终打印id,无论是否在配置中公开,可能是因为它不是Spring Data REST包的一部分
答案 1 :(得分:0)
您可能想重新考虑在REST响应中公开基于Neo4j的ID ...可能有一个原因,SDR创建者默认情况下不包含实体的ID。
对于Neo4j和应用程序视图,暴露和使用Neo4j内部id是安全的,因为应用程序中的任何内容都不会因使用它们而中断。
也就是说,Neo4j内部id被循环使用,我的意思是,如果节点或关系的内部id为12345,并且在某些时候删除了节点或关系,则12345的id有资格被未来的节点重用或关系。我认为明智地假设新的id将在未来的某个时候重用。这具有负面影响,即Neo4j内部id不被认为是“稳定的”,不应在您的应用程序之外使用。
至于一个新的代理键的例子,我会指向GraphAware的https://github.com/graphaware/neo4j-uuid的neo4j-uuid项目。此Neo4j插件可用于在所有节点和关系上自动创建唯一且稳定的UUID,这些UUID将不会也不会被更改或更新。