Создание 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 }}}"
}
Другие вопросы по тегам