Akka HTTPを使用して、SangriaのGetting Startedを少し修正しています。私は、serializaltionのlibとしてjson4s-jacksonを使用しようとしていますが、私が望む応答を得るためにいくつかの問題に走っています。json4sとAkka HTTPでSangriaの応答をシリアル化するにはどうすればよいですか?
具体的には、私が手にシリアライズされた応答が(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を見てきましたが、json4sの代わりにspray-jsonを使用した場合を除いて、まったく同じようです。
アイデア?ありがとう!