java neo4j使用cypher创建节点:java.lang.String不能强制转换为java.util.Map

java neo4j使用cypher创建节点:java.lang.String不能强制转换为java.util.Map,java,json,rest,neo4j,jersey,Java,Json,Rest,Neo4j,Jersey,嗨,Graphista和其他Java大师 在检查了neo4j提供的示例后,我根据给出的答案更改了代码,但仍然没有用。拜托,有人能帮我吗 我有一个java程序,它通过jersey客户端(org.glassfish.jersey.core的2.11版)连接到Neo4J REST API端点 我就是这么做的: logger.trace("sending cypher {} to endpoint {}", cypherString, nodePointUrl); Web

嗨,Graphista和其他Java大师

在检查了neo4j提供的示例后,我根据给出的答案更改了代码,但仍然没有用。拜托,有人能帮我吗

我有一个java程序,它通过jersey客户端(org.glassfish.jersey.core的2.11版)连接到Neo4J REST API端点

我就是这么做的:

        logger.trace("sending cypher {} to endpoint {}", cypherString, nodePointUrl);
        WebResource resource2 = Client.create().resource( nodePointUrl );

        ClientResponse response2 = resource2
                .accept( "application/json" )
                .type( "application/json" )
                .entity( cypherString )
                .post( ClientResponse.class );

        logger.debug("POST to {} returned status code {}, returned data: {}",
                nodePointUrl, response2.getStatus(),
                response2.getEntity(String.class));

        HttpStatusCodes httpStatusCodes = HttpStatusCodes.getHttpStatusCode(response2.getStatus());
我发送给rest api的cypherstring中的json如下所示:

{"CREATE": [{"POST": {"id":"532552232906940416","text":"Warburg Research...","subject":"Warburg Research ...","teaser":"Warburg Research...","lang":"de"}}]}
我收到的错误消息如下:

 java.lang.String cannot be cast to java.util.Map
如您所见,我的代码相当简单。我直接从neo4j网站()上获得了它——但它总是会退出(见下面的日志)

请查看错误日志,并提示我做错了什么

提前感谢,

基督教徒

"message" : "java.lang.String cannot be cast to java.util.Map",
"exception" : "BadInputException",
"fullname" : "org.neo4j.server.rest.repr.BadInputException",
"stacktrace" : [ "org.neo4j.server.rest.repr.formats.JsonFormat.readMap(JsonFormat.java:92)", "org.neo4j.server.rest.web.RestfulGraphDatabase.createNode(RestfulGraphDatabase.java:238)", "java.lang.reflect.Method.invoke(Method.java:606)", "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:139)", "java.lang.Thread.run(Thread.java:745)" ],
"cause" : {
   "message" : "java.lang.String cannot be cast to java.util.Map",
   "exception" : "ClassCastException",
   "stacktrace" : [ "org.neo4j.server.rest.domain.JsonHelper.jsonToMap(JsonHelper.java:53)", "org.neo4j.server.rest.repr.formats.JsonFormat.readMap(JsonFormat.java:88)", "org.neo4j.server.rest.web.RestfulGraphDatabase.createNode(RestfulGraphDatabase.java:238)", "java.lang.reflect.Method.invoke(Method.java:606)", "org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:139)", "java.lang.Thread.run(Thread.java:745)" ],
  "fullname" : "java.lang.ClassCastException"
  }
}

如果您的
cypherString
看起来像这样,那么它可能是错误的。它试图解析JSON,而您没有提供JSON。从示例中可以看出,它们的有效负载是:

String payload = "{\"statements\" : [ {\"statement\" : \"" +query + "\"} ]}";
您应该做同样的事情,但将查询替换为变量
cypherString
。因此,您将:

String payload = "{\"statements\" : [ {\"statement\" : \"" + cypherString + "\"} ]}";
ClientResponse response = resource
        .accept( MediaType.APPLICATION_JSON )
        .type( MediaType.APPLICATION_JSON )
        .entity( payload )
        .post( ClientResponse.class );

好吧,也许我在这里有点笨,但在更改我的cypher语句后,我收到了一个不同的错误。这是我的新密码语句:{“CREATE”:[{“s”:“POST”{“id”:“532466871140753408”,“text”:“hier ister der text”,“lang”:“de”}]}。这是一个新的错误:“java.lang.String不能转换为java.util.Map”,我不知道您在做什么,但您需要一个类似以下内容的结构:
{“statements”:[{“statement”:“CREATE(p:Post{id:523,text:“hier ister text”,lang:“de”})RETURN p]}
Neo4j将解析密码查询的JSON我把我的声明编辑如下:{“声明”:[{“声明”:“创建”(p:“POST”{“id”:“532555943180263424”,“text:“mein text”,“subject:“mein subject”,“trister:“mein-trister”,“lang:“de”})}]}但仍然是相同的结果,我认为您将其发送到了错误的端点。请确保您将post发送到事务性密码端点URL,而不是节点端点。实际上,toJsonString()会自动生成“环绕键”方法。但无论如何,你是对的。这是我第一次使用neo4j,所以我希望有一个学习曲线:-)你能分享你的密码语句和你发布到的URL吗?是的,当然。我的密码语句是:
{“语句”:[{“语句”:“创建”(p:“POST”{“id”:“532769886335168512”,“text:“my text”,“lang:“de”}}}
我将它发送到端点。属性的json字符串是用toJsonString()创建的方法,并在通过网络发送之前添加语句部分和相应的括号。有没有可能,这里有人可以帮助我???我仍然完全卡住了。我现在使用事务端点,正如您所看到的,根据neo4j给出的示例,我的cypher语句是,但我仍然收到以下错误:
Neo.ClientError.Request.InvalidFormat,“message:”无法反序列化请求:意外字符(“(”(代码40)):应使用逗号分隔对象条目