我正在使用 Akka HTTP处理 Sangria 的Getting Started的轻微变化。我正在尝试使用 json4s-jackson 作为序列化库,但在获得我想要的响应时遇到了一些麻烦。
具体来说,我得到的序列化响应是(StatusCode, Node)
元组的 JSON 版本:
{
"_1": {
"allowsEntity": true,
"defaultMessage": "OK",
"intValue": 200,
"reason": "OK"
},
"_2": {
"data": {
"foo": {
"id": "1",
"name": "Foo"
}
}
}
}
该data
部分是正确的,但显然我只想要那个而不是序列化元组的第一个元素。
我正在使用akka-http-json4s,所以我的路线特征如下:
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
}
对于我的生活,我无法弄清楚出了什么问题。我一直在看sangria-akka-http-example但它似乎完全一样,除了使用 spray-json 而不是 json4s。
想法?谢谢!