2017-02-16 57 views
1

我嘗試使用spring數據@RepositoryRestResource neo4j,但在返回的json沒有「id」字段。如何改變這種行爲?Neo4j與彈簧數據 - 暴露域標記@GraphId

輸出示例:

{ 
    "_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

您使用的是什麼版本的SDN和SR-REST? – digx1

回答

0

看來它是春天的數據REST默認設置。下面列出的配置有幫助,id在JSON中可見。

@Component 
public class SpringDataRestCustomization extends RepositoryRestConfigurerAdapter { 

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

我也注意到,@RestController的工作方式不同,總是打印證件,如果不管它是否在配置曝光,可能是因爲它不是春REST的數據包的一部分。

0

您可能希望重新考慮在您的REST響應中公開您的基於Neo4j的標識符......這可能是SDR創建者默認不包含實體標識符的原因。

對於Neo4j和應用程序視圖,暴露並使用Neo4j內部id是安全的,因爲應用程序中的任何內容都不會因使用它而中斷。

也就是說,Neo4j內部ID是回收的,我的意思是如果一個節點或關係的內部ID爲12345,並且在某些時候節點或關係被刪除,那麼12345的ID就有資格被未來重用節點或關係。我相信明智的做法是假設新的可用ID將在未來的某個時間點被重用。這具有Neo4j內部ID不被認爲是「穩定」的負面影響,不應該在應用程序之外使用。

至於一個新的代理鍵的例子,我會指向你的GraphAware的neo4j-uuid項目https://github.com/graphaware/neo4j-uuid。這個Neo4j插件可用於在所有節點和關係上自動創建唯一且穩定的UUID,這些UUID不會也不能更改或更新。