私はGraphQLを初めて使い、別のマイクロサービスで実装したGraphQL POSTクエリをプログラマチックに送信する方法を理解しようとしています。JavaプログラムによるGraphQL RESTクエリの送信
私の主なアプリケーションでは、POST BodyをString GraphQLクエリとして添付している間に、Java + Spring REST Templateを使用してクエリを送信しています。
String body = "query MyLearner {learner(id: 1) {lastName givenName} learners { givenName }}";
私は自分のプレイScalaのマイクロサービスでクエリを受け取ることができますが、JSONを解析することはできません。私は基本的には人のようになりますので、自分のドメインモデルとGraphQLサングリアコードを実装しようとした
def graphqlBody(tenant: Int) = Action.async(parse.json) { request ⇒
val query = (request.body \ "query").as[String]
val operation = (request.body \ "operationName").asOpt[String]
val variables = (request.body \ "variables").toOption.flatMap {
case JsString(vars) ⇒ Some(parseVariables(vars))
case obj: JsObject ⇒ Some(obj)
case _ ⇒ None
}
executeQuery(query, variables, operation)
}
注:メソッドを受信
。 sangria
JSONの解析中にメソッドの1行目にエラーが発生しましたが、JSON本体が有効なJSONでないと仮定しています。これはGraphQL形式ですが、これはSangriaなぜここではうまくいかないのか分かりません。
play.api.http.HttpErrorHandlerExceptions $$アノン$ 1:実行例外[[JsResultException:JsResultException(エラー:リスト((リスト(ValidationErrorを(リスト(「クエリMyLearner {学習者(ID:1){lastNameのgivenName属性}学習{givenName属性}}」)WrappedArray())))))]] JSONのデバッグから
スクリーンショットJSONボディ受信されたオブジェクトではない:@Raカガイダンスに
ありがとう私は正しい質問を出すことができました。答えは下記をご覧ください。
{
"variables":{
"id":1
},
"operationName":"MyLearner",
"query":"query MyLearner($id: Long!) {learner(id: $id) {misId givenName}}"
}
メソッドが受け取るリクエストの本文は何ですか?あなたが言ったように、あなたのjsonを解読できないような演劇のようだ。 – vdebergue
私はJSON Bodyのスクリーンショットで質問を更新しました。 – Schokea