在javascript中通过rest执行的cypher查询中找不到参数

时间:2013-04-16 07:17:28

标签: javascript rest neo4j cypher

早上好, 我有一个通过Java程序构建Maven Dependencies的Neo4j数据库。现在我想创建一个Web接口来访问数据。 通过jQuery.ajax执行cypher POST时,我收到错误的请求错误。 详情:

var query2 = '{"query":"start n = node(*) where n.groupId! = {groupId} and n.artifactId! = {artifactId} return n.version","params":{"groupId":"junit","artifactId":"junit"}}';

当我通过休息发送到服务器时,我收到400 Bad Request错误:

  

{     “message”:“预期名为groupId的参数”,     “exception”:“BadInputException”,     “堆栈跟踪”: “org.neo4j.server.rest.repr.RepresentationExceptionHandlingIterable.exceptionOnHasNext(RepresentationExceptionHandlingIterable.java:51)”, “org.neo4j.helpers.collection.ExceptionHandlingIterable $ 1.hasNext(ExceptionHandlingIterable.java:61)”, “org.neo4j.helpers.collection.IteratorWrapper.hasNext(IteratorWrapper.java:42)”, “org.neo4j.server.rest.repr.ListRepresentation.serialize(ListRepresentation.java:58)”,“org.neo4j.server .rest.repr.Serializer.serialize(Serializer.java:75)“,”org.neo4j.server.rest.repr.MappingSerializer.putList(MappingSerializer.java:61)“,”org.neo4j.server.rest.repr .CypherResultRepresentation.serialize(CypherResultRepresentation.java:50) “ ”org.neo4j.server.rest.repr.MappingRepresentation.serialize(MappingRepresentation.java:42)“,” org.neo4j.server.rest.repr.OutputFormat.format (OutputFormat.java:170)“,”org.neo4j.server.rest.repr.OutputFormat.formatRepresentation(OutputFormat.java:120)“,”org.neo4j.server.rest.repr.OutputFormat.response(OutputFormat.j ava:107)“,”org.neo4j.server.rest.repr.OutputFormat.ok(OutputFormat.java:55)“,”org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:68) “,”java.lang.reflect.Method.invoke(未知来源)“]   }

我还尝试通过JS对象构建查询,如下所示:

        var query = {};
    query["query"] = text;
    query["params"] = JSON.parse("{" + params + "}");

其中text是查询字符串,并使用正确的语法对参数进行参数化。 (“param1”:“value1”,...)

直到现在,这似乎是我在某处错误输入的东西。 有趣的是,当省略参数并使用“查询”属性编写请求时,整个过程都有效。

另外

JSONObject jObject = new JSONObject();
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("groupId", "junit");
        params.put("artifactId", "junit");
        String query = "start n = node(*) where n.groupId! = {groupId} and n.artifactId! = {artifactId} return n.version";
        jObject.put("query", query);
        jObject.put("params", params);

然后将jObject.toString()发送到Java中的数据库就像魅力... 好吧,我不得不说我的机智已经结束了。 希望你们能帮帮我:)。

1 个答案:

答案 0 :(得分:1)

您是否提供了content-type:application/jsonaccept:application/json个请求标题?