【问题标题】:how to insert cypher statement in http post request如何在http post请求中插入密码语句
【发布时间】:2014-05-01 22:20:26
【问题描述】:

我刚开始使用 neo4J,想尝试事务密码端点。我的 neo4J 服务器在 localhost:7474/ 上运行,并插入了电影数据。

in the documentation 所述,我必须进行发布请求并包含一些参数。不幸的是,我不知道如何在 POST 请求中包含我的查询。据我了解,我必须传递一个 JSON 字符串。

private static String sendPost() throws Exception {

        String url = "http://localhost:7474/db/data/transaction";
        String statement ="[ { \"statement\" : \"MATCH (n:Person) RETURN n.name, n.born\"} ]"; 



        HttpClient client = new DefaultHttpClient();
        HttpPost post = new HttpPost(url);

        List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
        urlParameters.add(new BasicNameValuePair("Accept", "application/json; charset=UTF-8"));
        urlParameters.add(new BasicNameValuePair("Content-Type", "application/json"));
        urlParameters.add(new BasicNameValuePair("statements", statement));

        post.setEntity(new UrlEncodedFormEntity(urlParameters));

        HttpResponse response = client.execute(post);

        StringBuilder builder = new StringBuilder();

        builder.append("\nSending 'POST' request to URL : " + url+"<br>");
        builder.append("Post parameters : " + post.getEntity()+"<br>");
        builder.append("Response Code : " + response.getStatusLine().getStatusCode()+"<br>");

        BufferedReader rd = new BufferedReader(
                        new InputStreamReader(response.getEntity().getContent()));



        StringBuffer result = new StringBuffer();
        result.append("<p>");
        String line = "";
        while ((line = rd.readLine()) != null) {
            result.append(line+"\n");
        }

        result.append("</p>");

        return builder.toString();

    }

当我执行代码时,我得到以下输出:

Sending 'POST' request to URL : http://localhost:7474/db/data/transaction
Post parameters : org.apache.http.client.entity.UrlEncodedFormEntity@76adb5f6
Response Code : 415

谁能帮助我了解如何将我的查询包含在 POST 请求中?

【问题讨论】:

  • 在 Google 和 Neo4j 文档之间,有很多关于如何向 Neo4j 服务器发送 POST 请求的示例,例如通过泽西岛客户。除非我在这里误解了这个问题。
  • 我看到了。但我想知道为什么我的标准 Apache http 客户端示例不起作用。
  • 你误会了http请求的每一部分是什么,url-parameters != headers != body,JSON的payload属于body,其余都是http请求的headers。

标签: java neo4j cypher


【解决方案1】:

http://docs.neo4j.org/chunked/stable/rest-api-transactional.html

看一下,您会看到您的 POST 请求的主体不是服务器所期望的,即您应该发送整个 JSON 文档,而不是带有“语句”作为键的 k/v 对您的 JSON Cypher 查询作为值。请记住,您在这里发送的是 JSON,而不是 URLEncoded 正文。

此外,您似乎将“Accept”和“Content-Type”k/v 对设置为 POST 正文的一部分,而实际上它们应该是标头的一部分。

另外,请考虑使用 Cypher 端点:http://docs.neo4j.org/chunked/stable/rest-api-cypher.html

HTH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多