ここにあるrest-client-builderプラグインを使用しようとしています
http://grails.org/plugin/rest-client-builder
私のneo4jグラフでサイファークエリを実行するには
だから私はまさに私が望むことをするグルーヴィーなスクリプトを構築しました
@Grab(group='org.codehaus.groovy.modules.http-builder', module='http-builder', version='0.5.0-RC2' )
@Grab(group='net.sf.json-lib', module='json-lib', version='2.4', classifier='jdk15' )
import groovyx.net.http.*
import static groovyx.net.http.ContentType.*
import static groovyx.net.http.Method.*
def query(statement, params,success, error) {
def http = new HTTPBuilder( 'http://localhost:7474' )
http.request( POST, JSON ) {
uri.path = '/db/data/cypher/'
headers.'X-Stream' = 'true'
requestContentType = JSON
body = [ query : statement , params : params ?: [:] ]
response.success = { resp, json ->
if (success) success(json)
else {
println "Status ${resp.statusLine} Columns ${json.columns}\nData: ${json.data}"
}
}
response.failure = { resp, message ->
def result=[status:resp.statusLine.statusCode,statusText:resp.statusLine.reasonPhrase]
result.headers = resp.headers.collect { h -> [ (h.name) : h.value ] }
result.message = message
if (error) {
error(result)
} else {
println "Status: ${result.status} : ${result.statusText} "
println 'Headers: ${result.headers}'
println 'Message: ${result.message}'
}
}
}
}
query("START v=node({id}) RETURN v",[id:170],{ println "Success: ${it.data}" },{ println "Error: ${it}" })
これは、必要なjsonを返します。そのため、コントローラ メソッドでこれをレプリケートする grails で問題が発生したため、http レスト ポスト リクエストを実行するプラグインを選択しました。
だから私はと呼ばれるサービスメソッドを持っていますCypherService
:
package awhinterface
import grails.converters.JSON
import grails.plugins.rest.client.RestBuilder
class CypherService {
def query() {
def rest = new RestBuilder()
def resp = rest.post("http://localhost:7474"){
contentType "application/json"
body = [query: "START v=node(170) RETURN v"]
}
return resp as JSON;
}
}
私はそれのための非常に簡単なテストを書きました:
import grails.test.mixin.*
import org.junit.*
@TestFor(CypherService)
class CypherServiceTests {
void testquery() {
def cypherService = new CypherService()
def myjson = cypherService.query()
println(myjson)
}
}
ただし、次のエラーが残っています。
Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [application/json]
org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [application/json]
at grails.plugins.rest.client.RestBuilder.doRequestInternal(RestBuilder.groovy:93)
at grails.plugins.rest.client.RestBuilder.post(RestBuilder.groovy:72)
at awhinterface.CypherService.query(CypherService.groovy:10)
at awhinterface.CypherServiceTests.testquery(CypherServiceTests.groovy:17)
私はまだhttpリクエストに非常に慣れていません。扇動した人いますか?ありがとう!
編集
現在、いくつかの提案を受けて、これを得ました
def query() {
def rest = new RestBuilder()
def resp = rest.post("http://localhost:7474") {
contentType "application/json"
uri = "/db/data/cypher/"
body '{query: "START v=node(170) RETURN v"}'
}
return resp
このエラーで:
org.springframework.web.client.RestClientException: Could not write request: no suitable HttpMessageConverter found for request type [org.springframework.util.LinkedMultiValueMap] and content type [application/json]
at grails.plugins.rest.client.RestBuilder.doRequestInternal(RestBuilder.groovy:93)
at grails.plugins.rest.client.RestBuilder.post(RestBuilder.groovy:72)