Сангрия простой запрос graphQL, но синтаксическая ошибка

Я пытаюсь реализовать игрушечный сервер с конечной точкой graphql, используя Akka Http + Sangria. Однако, когда я отправляю запрос POST с полезной нагрузкой (прямой cppy и вставка из проверки Chrome)

{"query": "query FetchPokemons ($ height: Int) {\ n pokemonsWithHeight (height: $ height) {\ n name \ n} \ n}", "variables": {"height": 100}, "operationName ":" FetchPokemons "}

Сервер выдает ошибку

sangria.parser.SyntaxError: синтаксическая ошибка при разборе запроса GraphQL. Неожиданный конец ввода, ожидаемое объединение, комментарии, интерфейс, скаляр, перечисление, тип, inputType или директива (строка 1, столбец 79): "query FetchPokemons {\ n pokemonsWithHeight (height: 100) {\ n name \ n} \ n" } "

Но после проверки документов graphql, похоже, нет причин, по которым эта строка запроса не прошла бы этап синтаксического анализа. Это мой код для обработки тела http.

def queryResult(request: Json, schema: Schema[Resolvers, Unit], resolvers: Resolvers)(
  implicit ec: ExecutionContext
): Route = { ctx =>
  for {
    queryJson <- Future.fromTry(Try(request.findAllByKey("query").head))
    queryAst  <- Future.fromTry(QueryParser.parse(queryJson.noSpaces))
    variables =  request.findAllByKey("variables").headOption.getOrElse(Json.obj())
    opName    =  request.findAllByKey("operationName").headOption.flatMap(_.asString)
    result    <- Executor.execute(schema, queryAst, resolvers, operationName = opName, variables = variables)
    res       <- ctx.complete(StatusCodes.OK -> result)
  } yield res
}

person Inchan Hwang    schedule 23.07.2018    source источник


Ответы (1)


Мне пришлось вручную удалить \ "и \\ n из

"запросить FetchPokemons ($ height: Int) {\ n pokemonsWithHeight (height: $ height) {\ n name \ n} \ n}"

кормить

запросить FetchPokemons ($ height: Int) {pokemonsWithHeight (height: $ height) {name}}

в парсер с помощью

def formatQuery(s: String): String = s.replaceAllLiterally("\\n","").replaceAllLiterally("\"", "")

Это простое решение, но нечистое. Надеюсь, есть способ лучше - возможно, изменить queryJson.nospace?

person Inchan Hwang    schedule 23.07.2018