【发布时间】:2015-04-04 01:50:38
【问题描述】:
背景:
我正在使用本地运行的 Neo4J 实例(在 localhost:7474),并通过一个 Java 适配器访问它,该适配器通过 REST API(使用 Jersey)使用 Cypher,并使我的 Grails 应用程序可以访问数据服务器。
问题:
是否可以通过 REST API 使用 Cypher 查询 Neo4J 数据库,并返回节点的 URI?现在,我可以检查 Neo4J 服务器状态、创建节点、填充节点属性、查询和创建关系。 我的问题是我的“添加关系”和遍历代码需要一个节点 URI 作为输入。我可以查询节点并获得描述结果的正确 JSON,但我似乎无法获得 URI 位置。
这是我的 getUserByEmail 代码的简化版本:
public URI getUserByEmail( String email )
{
System.out.println( "GETTING USER BY EMAIL [" + email + "]..." );
String queryStr = "MATCH (user) WHERE user.nodetype=\'user\' and user.email=\'" + email + "\' RETURN user";
WebResource webResource = client.resource( ROOT_URI + "/transaction/commit" );
String payload = "{\"statements\" : [ {\"statement\" : \"" + queryStr + "\"} ]}";
ClientResponse response = webResource
.accept( MediaType.APPLICATION_JSON )
.type( MediaType.APPLICATION_JSON )
.entity( payload )
.post( ClientResponse.class );
String responseStr = response.getEntity( String.class );
URI responseLocation = response.getLocation();
System.out.println( "RESPONSE STRING: " + responseStr );
System.out.println( "GOT USER AT: [" + responseLocation + "]" );
return responseLocation;
}
JSON 结果很好地返回并反映了图形数据库中的内容。但是,该位置始终为空。
只要我有起始节点的 URI,我使用的“添加关系”代码就可以工作。我拥有的代码基于这里的 addRelationship() 代码:
【问题讨论】: