2017-02-16 4 views
1

스프링 데이터 @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 
} 

내 REPO :

@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 패키지의 일부가 아니다 아마 때문에, 그것은 나 설정에 노출되지 것없이 경우, ID를 인쇄했습니다.

0

Neo4j 기반 ID가 REST 응답에 노출되었다고 다시 생각해 볼 수 있습니다. SDR 작성자가 기본적으로 엔티티 ID를 포함하지 않는 데는 이유가있을 수 있습니다.

Neo4j의 경우와 응용 프로그램보기에서 Neo4j 내부 ID를 노출하고 사용하는 것이 안전합니다. 응용 프로그램에서 아무것도 사용하지 않아도됩니다.

즉, Neo4j 내부 ID는 재활용됩니다. 노드 또는 관계에 내부 ID가 12345이고 일부 지점에서 노드 또는 관계가 삭제 된 경우 12345의 ID는 미래에 재사용 할 수있게됩니다. 노드 또는 관계. 새롭게 사용할 수있는 ID가 향후 어느 시점에서 재사용 될 것이라고 가정하는 것이 현명하다고 생각합니다. 이것은 Neo4j 내부 ID가 "안정적인"것으로 간주되지 않으므로 응용 프로그램 외부에서 사용해서는 안된다는 부작용이 있습니다.

새로운 대리 키의 예는 GraphAware의 neo4j-uuid 프로젝트 https://github.com/graphaware/neo4j-uuid을 가리키고 있습니다. 이 Neo4j 플러그인은 변경되지 않거나 업데이트 될 수없는 모든 노드와 관계에 고유하고 안정적인 UUID를 자동으로 생성하는 데 사용할 수 있습니다.