我正在开发 neo4vertx,这是一个可以使用 Vert.x 与 Neo4j 数据库进行通信的模块。具体来说,我正在开发名为“查询”的功能,该功能允许 Vert.x 用户 以 eventbus 消息的形式发送 Cypher 查询并返回 JSON 结果集。
但是,在使用 JsonHelper.createJsonFrom() 和某些查询序列化为 JSON 时,我似乎遇到了意外的问题。
一个简单的例子(当然数据库里有东西):
// This Fails with JsonMappingException (see below):
String query="MATCH (n) RETURN n";
// This Succeeds:
String query="MATCH (n) RETURN n.something";
//Rest of code:
engine = new ExecutionEngine(graphDatabaseService);
ExecutionResult result;
result = engine.execute(query);
Object object = result.iterator();
String foo = JsonHelper.createJsonFrom(object);
System.out.println("DEBUG (foo): " + foo);
有人觉得这很熟悉吗?我们本质上希望能够 发送任何类型的查询并返回空 json 字符串或 json 表示形式与您可以从 Neo4j 的 Web 界面!
异常(exception):
testQuery(org.openpcf.neo4vertx.neo4j.Neo4jGraphTest) Time elapsed: 2.362 sec <<< ERROR!
org.neo4j.server.rest.domain.JsonBuildRuntimeException: org.codehaus.jackson.map.JsonMappingException: No serializer found for class org.neo4j.kernel.InternalAbstractGraphDatabase$DependencyResolverImpl and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationConfig.Feature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: scala.collection.convert.MapWrapper["content"]->org.neo4j.kernel.impl.core.NodeProxy["graphDatabase"]->org.neo4j.test.["dependencyResolver"])
...
最佳答案
尽管 ExecutionResult 是 Iterator<Map<String,Object>>
的实现它目前只是 scala 类以及 Neo4j 类(如节点、关系、路径)的 java 包装器。
所以你可能需要做两件事:
- 用适当的映射和列表递归替换 neo4j 类
- 可能:用 java 列表和映射递归替换 scala 列表和映射,例如
new LinkedHashMap(row)
我不久前在我的 cypher-websocket-experiments 中做了一些这样的事情。
关于java - Neo4j Cypher 结果为 JSON : Getting JsonMappingException when using JsonHelper. createJsonFrom() 但仅限于某些查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25141511/