Создание POST-запроса на PlayServiceCall
У меня есть PlayServiceCall, который должен обрабатывать запрос GraphQL POST. Код ниже -
override def restPostCall: PlayServiceCall[String, String] = PlayServiceCall { request =>
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.map {
case obj: JsObject => obj
case _ => Json.obj()
}
QueryParser.parse(query) match {
// query parsed successfully, time to execute it!
case Success(queryAst) ⇒
executeGraphQLQuery(queryAst, operation, variables getOrElse Json.obj())
// can't parse GraphQL query, return error
case Failure(error: SyntaxError) ⇒
Future.successful(BadRequest(Json.obj("error" → error.getMessage)))
}
}
}
Код такой же, как описанный на странице "Начало работы" на веб-сайте Sangria, а также код примера проекта на Github от Sangria. Здесь метод graphqlBody обрабатывает POST-запрос GraphQL.
Когда я отправляю запрос GraphQL методом POST, он выдает следующую ошибку:
For request 'POST /graphql' [Invalid Json: Unrecognized token 'query': was expecting ('true', 'false' or 'null') at [Source: akka.util.ByteIterator$ByteArrayIterator$$anon$1@10f6774; line: 1, column: 7]]
Может кто-нибудь помочь, пожалуйста, как отправить запрос GraphQL методом POST с Sangria.
1 ответ
Эй, ребята, я только что нашел решение. Запрос все еще нужно отправить в формате JSON, как этот
{
"query" : "query HeroAndFriends { hero {name friends { name }}}"
}