2017-03-08 44 views
0

我試圖建立在https://neo4j.com/developer/example-project/Neo4j的電影例如返回畸形的JSON

鏈接發現代碼中的春數據的Neo4j 4部 Neo4j的電影的例子是在https://github.com/neo4j-examples/movies-java-spring-data-neo4j-4

我把一切都運行起來本地。三個組件中的兩個正在工作,電影列表和背景圖。不工作的是在右側顯示個人電影。

此信息被填充開始在下面的代碼
的index.html(開始於線82):

<script type="text/javascript"> 
    $(function() { 
     function showMovie(title) { 
      $.get("/movies/search/findByTitle?title=" + encodeURIComponent(title), // todo fix paramter in SDN 
        function (data) { 
         if (!data) return; // || !data["_embedded"].movies) return; 
         var movie = data; // ["_embedded"].movies[0]; 
         $("#title").text(movie.title); 
... 
        }); 
       }, "json"); 
     return false; 
    } 
... 
</javascript> 

功能,function (data)不被調用。

http://localhost:8080/movies/search/findByTitle?title=The%20Matrix%20Reloaded被返回以下畸形的JSON:

{ 
    "title" : "The Matrix Reloaded", 
    "released" : 2003, 
    "tagline" : "Free your mind", 
    "roles" : [ { 
    "roles" : [ "Morpheus" ], 
    "person" : { 
     "name" : "Laurence Fishburne", 
     "born" : 1961 
        }, 
    "movie" : { : 9 
    } 
    }, { 
    "roles" : [ "Agent Smith" ], 
    "person" : { 
     "name" : "Hugo Weaving", 
     "born" : 1960 
    }, 
    "movie" : { : 9 
    } 
    }, { 
    "roles" : [ "Trinity" ], 
    "person" : { 
     "name" : "Carrie-Anne Moss", 
     "born" : 1967 
    }, 
    "movie" : { : 9 
    } 
    }, { 
    "roles" : [ "Neo" ], 
    "person" : { 
     "name" : "Keanu Reeves", 
     "born" : 1964 
    }, 
    "movie" : { : 9 
    } 
    } ], 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/movies/9" 
    }, 
    "movie" : { 
     "href" : "http://localhost:8080/movies/9" 
    } 
    } 
} 

的ID是不正確填充。我試圖運行這個例子開始學習spring-boot和neo4j,我不確定代碼爲什麼沒有返回正確的數據結構?

沒有爲Neo4j的查詢日誌條目:

MATCH (n:`Movie`) WHERE n.`title` = { `title_0` } WITH n MATCH p=(n)-[*0..1]-(m) RETURN p, ID(n) with params {title_0=The Matrix Reloaded} 

我跑,在Neo4j的控制檯,看着輸出的文本:

╒══════════════════════════════╤═══════╕ 
│"p"       │"ID(n)"│ 
╞══════════════════════════════╪═══════╡ 
│[]       │"9" │ 
├──────────────────────────────┼───────┤ 
│[{"tagline":"Free your mind","│"9" │ 
│title":"The Matrix Reloaded","│  │ 
│released":"2003"},{"roles":["A│  │ 
│gent Smith"]},{"born":"1960","│  │ 
│name":"Hugo Weaving"}]  │  │ 
├──────────────────────────────┼───────┤ 
│[{"tagline":"Free your mind","│"9" │ 
│title":"The Matrix Reloaded","│  │ 
│released":"2003"},{"roles":["M│  │ 
│orpheus"]},{"born":"1961","nam│  │ 
│e":"Laurence Fishburne"}]  │  │ 
├──────────────────────────────┼───────┤ 
│[{"tagline":"Free your mind","│"9" │ 
│title":"The Matrix Reloaded","│  │ 
│released":"2003"},{"roles":["T│  │ 
│rinity"]},{"born":"1967","name│  │ 
│":"Carrie-Anne Moss"}]  │  │ 
├──────────────────────────────┼───────┤ 
│[{"tagline":"Free your mind","│"9" │ 
│title":"The Matrix Reloaded","│  │ 
│released":"2003"},{"roles":["N│  │ 
│eo"]},{"born":"1964","name":"K│  │ 
│eanu Reeves"}]    │  │ 
└──────────────────────────────┴───────┘ 

它看起來像問題是與此額外的ID(n)列。我不知道它爲什麼被添加,或者如何讓它不被添加。唯一的代碼,我可以看到這將產生暗號代碼爲MovieRepository.java

Movie findByTitle(@Param("title") String title);

這是一個版本的問題,還是其他什麼東西?我怎樣才能得到它不返回ID(n)列,或返回一個正確的ID:9結構?

+0

我正在使用neo4j 3.1.0 – KitzyKitt

+0

你是否改變了實體中的任何東西? –

+0

@MichaelHunger - 我沒有。我試圖讓它運行起來,看看它們是如何一起工作的。 – KitzyKitt

回答

0

我能夠得到一個不同的例子,具有相同的結構,工作: https://github.com/springframeworkguru/spring-boot-neo4j-example然後修改它做我原來的例子試圖做。然後,我可以比較兩個項目之間的差異,將差異應用於原始項目並使其行爲正確。 以下是所有代碼的差異,使其正常工作:

的index.html(線105)評論脫節,沒有必要

(105)     //data = data["_embedded"].movies; 

MovieService.java增加文件

public Movie getByTitle (String title){ return movieRepository.findByTitle (title); } 

    public Collection<Movie> getByTitleContaining(String title) { 
     return movieRepository.findByTitleContaining (title); 
    } 

MovieController。java的添加到文件

@RequestMapping("/movies/search/findByTitle") 
    public Movie findByTitle(@RequestParam String title){ 
     return movieService.getByTitle(title); 
    } 

    @RequestMapping("/movies/search/findByTitleContaining") 
    public Collection<Movie> findByTitleContaining(@RequestParam String title){ 
     return movieService.getByTitleContaining(title); 
    } 

MovieRepository.java(9號線和15)刪除或註釋掉

(9) //import org.springframework.data.rest.core.annotation.RepositoryRestResource; 
... 
(15) //@RepositoryRestResource(collectionResourceRel = "movies", path = "movies") 

的pom.xml的可讀性,我把整個文件在這裏

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>com.neo4j.examples</groupId> 
    <artifactId>sdn4-movies</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>SDN4 University</name> 
    <description>Demo web project for Spring Boot using Spring Data Neo4j</description> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.5.1.RELEASE</version> 
     <relativePath/> <!-- lookup parent from repository --> <!-- added --> 
    </parent> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> 
     <java.version>1.8</java.version> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-neo4j</artifactId> 
      <!--<version>4.2.0.RELEASE</version>--> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-thymeleaf</artifactId> 
      <!--<artifactId>spring-boot-starter-data-neo4j</artifactId>--> 
     </dependency> 

     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-ogm-bolt-driver</artifactId> 
      <version>2.1.1</version> 
     </dependency> 

     <!--<dependency>--> 
      <!--<groupId>org.springframework.boot</groupId>--> 
      <!--<artifactId>spring-boot-starter-data-rest</artifactId>--> 
     <!--</dependency>--> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 

     <!-- For some reason newer versions of jackson cause errors with --> 
     <!-- serialisation of nested objects in graph --> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-annotations</artifactId> 
      <version>2.8.0</version> 
      <!--<version>2.5.5</version>--> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.8.6</version> 
      <!--<version>2.5.5</version>--> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-databind</artifactId> 
      <version>2.8.6</version> 
      <!--<version>2.5.5</version>--> 
     </dependency> 
     <!-- ========================================== --> 

     <!-- For use in testing --> 
     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j-ogm-embedded-driver</artifactId> 
      <version>2.1.1</version> 
      <scope>test</scope> 
     </dependency> 

     <dependency> 
      <groupId>org.neo4j</groupId> 
      <artifactId>neo4j</artifactId> 
      <version>3.1.1</version> 
      <scope>test</scope> 
     </dependency> 

    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

</project>