Я работаю над небольшой вариацией Начало работы, используя Akka HTTP. Я пытаюсь использовать json4s-jackson в качестве библиотеки сериализации, но у меня возникают проблемы с получением ответа, который я хочу.
В частности, сериализованный ответ, который я получаю, представляет собой JSON-версию кортежа (StatusCode, Node)
:
{
"_1": {
"allowsEntity": true,
"defaultMessage": "OK",
"intValue": 200,
"reason": "OK"
},
"_2": {
"data": {
"foo": {
"id": "1",
"name": "Foo"
}
}
}
}
Часть data
верна, но, очевидно, я просто хочу это, а не первый элемент сериализованного кортежа.
Я использую https://github.com/hseeberger/akka-http-json/tree/master/akka-http-json4s/src, поэтому мой трейт с маршрутом выглядит так:
case class GraphQlData(query: String, operation: Option[String])
trait FooController {
import de.heikoseeberger.akkahttpjson4s.Json4sSupport._
implicit val serialization = jackson.Serialization
implicit val formats = DefaultFormats
val fooRoutes = post {
entity(as[GraphQlData]) { data =>
QueryParser.parse(data.query) match {
// query parsed successfully, time to execute it!
case Success(queryAst) =>
complete {
Executor
.execute(
SchemaDefinition.FooSchema,
queryAst,
new FooService,
operationName = data.operation
)
.map(OK -> _)
.recover {
case error: QueryAnalysisError => BadRequest -> error.resolveError
case error: ErrorWithResolver => InternalServerError -> error.resolveError
}
}
// can't parse GraphQL query, return error
case Failure(error) =>
complete(BadRequest -> error.getMessage)
}
}
}
implicit def executionContext: ExecutionContext
}
На всю жизнь я не могу понять, что не так. Я просматривал https://github.com/sangria-graphql/sangria-akka-http-example, но похоже, это то же самое, за исключением использования spray-json вместо json4s.
Идеи? Спасибо!