2017-01-13 7 views
1

neo4jグラフデータベースにデータを挿入しようとしています。ジャージクライアントを使用して名前が 'Thamali'のPerson型ノードを作成しようとしています。私は以下で使用するJavaコードを与えました。 サイファークエリを実行しようとしましたCREATE (thamali:Person {name:"Thamali"}) 以下のJavaコードを使用しています。Javaコードから文字列を使用してcypherクエリを実行すると例外が発生する

import com.sun.jersey.api.client.Client; 
import com.sun.jersey.api.client.ClientResponse; 
import com.sun.jersey.api.client.WebResource; 
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; 

import javax.ws.rs.core.MediaType; 

public class NeoAPIClass { 
    private final String baseUri = "http://localhost:7474/db/data/cypher"; 
    private final String user = "neo4j"; 
    private final String password = "12345"; 

    public static void main(String args[]){ 
      NeoAPIClass n=new NeoAPIClass(); 
      n.runQuery(); 
    } 

    void runQuery(){ 
     Client client = Client.create(); 
     client.addFilter(new HTTPBasicAuthFilter(user, password)); 
     WebResource cypherResource = client.resource(baseUri); 

     String s="{\"query\":\"CREATE (thamali:Person{name:\"Thamali\"})\"}"; 
     ClientResponse cypherResponse = cypherResource.accept(MediaType.APPLICATION_JSON) 
       .type(MediaType.APPLICATION_JSON_TYPE).entity(s).post(ClientResponse.class); 

     System.out.println("Output from Server .... "+ cypherResponse.getStatus()); 

    } 

} 

私は誰がこれを解決するために私を助けてくださいすることができ、HTTPステータスコード500

ERROR The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container Unexpected character ('T' (code 84)): was expecting comma to separate OBJECT entries [line: 1, column: 41] 
    org.neo4j.server.rest.repr.BadInputException: Unexpected character ('T' (code 84)): was expecting comma to separate OBJECT entries [line: 1, column: 41] 
     at org.neo4j.server.rest.repr.formats.JsonFormat.readMap(JsonFormat.java:94) 
     at org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:89) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:498) 
     at com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) 
     at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) 

Caused by: org.neo4j.server.rest.domain.JsonParseException: Unexpected character ('T' (code 84)): was expecting comma to separate OBJECT entries [line: 1, column: 41] 
    at org.neo4j.server.rest.domain.JsonHelper.readJson(JsonHelper.java:73) 
    at org.neo4j.server.rest.domain.JsonHelper.jsonToMap(JsonHelper.java:54) 
    at org.neo4j.server.rest.repr.formats.JsonFormat.readMap(JsonFormat.java:90) 
    ... 43 more 

と、次の例外を取得します。

答えて

1

問題を参照してください。解決するには、2つの方法:

1)内部の引用への2つの追加のスラッシュ:

String s="{\"query\":\"CREATE (thamali:Person{name:\\\"Thamali\\\"})\"}"; 

2)使用JSONライブラリ。例:Douglas Crockford

JSONObject obj = new JSONObject(); 
obj.put("query", "CREATE (thamali: Person{name:\"Thamali\"})"); 
String s = obj.toString(); 
+0

ありがとう、私の問題を解決することができます。これでも私を助けてくれますか?私はcypherクエリに文字列パラメータを含める必要がありますhttp://stackoverflow.com/questions/41646451/error-in-inserting-a-string-parameter-to-a-cypher-query-in-a-java-code/41647180#41647180 –

1

Neo4j RESTインターフェイスを直接呼び出さないでください。現在、JavaからNeo4jサーバーにアクセスするには、そのJavaドライバーを使用することをお勧めします。

// imports 
import org.neo4j.driver.v1.*; 
import static org.neo4j.driver.v1.Values.parameters; 

// init 
Driver driver = GraphDatabase.driver("bolt://localhost:7687", AuthTokens.basic("neo4j", "neo4j")); 

//run query 
Session session = driver.session(); 
session.run("CREATE (a:Person {name: {name}, title: {title}})", 
     parameters("name", "Arthur", "title", "King")); 

// destroy 
session.close(); 
driver.close(); 

は、JSON文字列の正確な形成にhttps://neo4j.com/developer/java/#_neo4j_for_java_developers

関連する問題