このサイトのコードを (少し変更して)試していたところ、結果がInt
.
class NeoService(rootUrl: String) {
def this() = this("http://default/neo/URL/location/db/data")
val stdHeaders = Seq(
("Accept", "application/json"),
("Content-Type", "application/json")
)
def executeCypher(query: String, params: JsObject) : Future[Response] = {
WS.url(rootUrl + "/cypher").withHeaders(stdHeaders:_*).post(Json.obj(
"query" -> query,
"params" -> params
))
}
def findNode(id: Int) : Future[Option[Int]] = {
val cypher = """
START n=node({id})
RETURN id(n) as id
""".stripMargin
val params = Json.obj("id" -> id)
for (r <- executeCyhper(cypher, params)) yield {
val data = (r.json \ "data").as[JsArray]
if (data.value.size == 0)
None
else
Some(data.value(0).as[JsArray].value(0).as[Int])
}
}
}
有効な ID を渡すと、次のfindNode()
エラーが表示されます。
[JsResultException: JsResultException(errors:List((,List(ValidationError(validate.error.expected.jsnumber,WrappedArray())))))]
行で、Some(data.value(0).as[JsArray].value(0).as[Int])
存在しないIDを渡すと、次のエラーが発生します。
[JsResultException: JsResultException(errors:List((,List(ValidationError(validate.error.expected.jsarray,WrappedArray())))))]
ラインでval data = (response.json \ "data").as[JsArray]
このようなものを渡すだけの場合Int
:
... else
Some(10)...
それは正常に動作します。何が起こっているのか、エラーメッセージが何を伝えようとしているのかわかりません。