0

SDN 4.0.0.M1 と SpringBoot で新しい CineastsアプリをフォローしてSpring と Neo4j を学習しようとしていますが、curl http://localhost:8080/moviesで映画の URL にアクセスしようとするとエラーが発生します

MappingException: GraphModel をインスタンスにマッピング中にエラーが発生しました

何かを機能させるために最小限の実装を行ったので、コードはシンプルですが、おそらく何かを忘れていました

映画クラス

 @NodeEntity
    public class Movie {
    @GraphId
    private Long nodeId;

    private String id;
    private String title;

    public Movie() {
    }

    public Movie(String id, String title) {
        this.id = id;
        this.title = title;
    }
}

関連する MovieRepository は現在空です

public interface MovieRepository extends GraphRepository<Movie> {
}

ムービーコントローラー

@Autowired
private MovieRepository movieRepository;
@Autowired
private Session session;

@RequestMapping(value = "/movies/{id}", method = RequestMethod.GET, headers = "Accept=application/json")
public
@ResponseBody
Movie getMovie(@PathVariable String id) {
    return IteratorUtil.firstOrNull(findMovieByProperty("id", id));
}

public Iterable<Movie> findMovieByProperty(String propertyName, Object propertyValue) {
    return session.loadByProperty(Movie.class, new Property(propertyName, propertyValue));
}

およびデータベース接続を備えたメインクラス

@SpringBootApplication
@EnableNeo4jRepositories("cineasts.repository")
@EnableTransactionManagement
public class CineastsApplication extends Neo4jConfiguration {

    public static final int NEO4J_PORT = 7474;

    @Bean
    public Neo4jServer neo4jServer() {
        return new RemoteServer("http://localhost:" + NEO4J_PORT);
    }

    @Override
    public SessionFactory getSessionFactory() {
        return new SessionFactory("org.neo4j.cineasts.domain");
    }

    @Override
    @Bean
    @Scope(value = "session", proxyMode = ScopedProxyMode.TARGET_CLASS)
    public Session getSession() throws Exception {
        return super.getSession();
    }

    public static void main(String[] args) {
        SpringApplication.run(CineastsApplication.class, args);
    }
}

Neo4j を起動し、Neo4j ブラウザーでレコードを 1 つ追加しました

CREATE (m:Movie {id:1, name:'The Matrix'}) return m

localhost:8080 にアクセスすると、json の応答が表示されます

{
  "_links" : {
    "movies" : {
      "href" : "http://localhost:8080/movies"
    },
    "profile" : {
      "href" : "http://localhost:8080/alps"
    }
}

しかし、作成したばかりの映画またはhttp://localhost:8080/movies/1レコードを表示できません。これを修正するか、より関連性の高いメッセージを取得するためのアイデアはありますか?

ありがとう!

4

1 に答える 1

1

問題は、エンティティ定義が作成したノードの定義と一致しないという事実である可能性があります。Movie クラスは、idデータ型 String のプロパティと String 型のプロパティを定義しますtitle

でもあなたが使ったサイファー

CREATE (m:Movie {id:1, name:'The Matrix'}) return m

String id の代わりに number id を持ち、title プロパティの代わりに name プロパティを持つノードを作成します。

上記をに変更

CREATE (m:Movie {id:'1', title:'The Matrix'}) return m

それを修正する必要があります。

于 2015-05-05T13:55:33.757 に答える