akka-http + spray-json 客户端 json 编组
akka-http + spray-json client side json marshalling
我可以找到很多关于如何让 akka-http 服务器轻松编组由案例 class 表示的响应实体的示例,只需混入 SprayJsonSupport/DefaultJsonProtocol,在隐式范围内提供 jsonFormat ,并在路由 DSL 中使用 complete 指令。整洁的!
不过,我也想在客户端做一些类似的事情。我正在使用主机级别 API 提供的连接池流 ( clientFlow = Http.cachedHostConnectionPool ) 发出 (HttpRequest->context(T)) 元组,如下所示:
(Source.single(request -> context)
.via(clientFlow)
.runWith(Sink.head).flatMap {
case (Success(r: HttpResponse), c: T) => Future.successful(r)
case (Failure(f), c: T) => Future.failed(f)
}, context)
HttpRequest 对象是通过其中一种 apply() 方法创建的
HttpRequest(
method = HttpMethods.POST,
uri = "/uri",
entity = HttpEntity(contentType, """{"iWish":"i was an object"}"""))
在服务器端,使用路由 DSL(在隐式范围内混合了正确的特征和 SomeCaseClass 的 jsonFormat)这看起来像:
complete(StatusCodes.BadRequest, SomeCaseClass(iWish = "i was an object"))
问:客户端 APIs/DSLs 是否有任何允许我以类似方式隐藏编组的东西?
你可以有类似下面的内容(如果你的 Format
在范围内)
Marshal(yourObject).to[RequestEntity].map { entity =>
HttpRequest(
method = HttpMethods.POST,
uri = "/uri",
entity = entity)
}
(进一步阅读here)
我可以找到很多关于如何让 akka-http 服务器轻松编组由案例 class 表示的响应实体的示例,只需混入 SprayJsonSupport/DefaultJsonProtocol,在隐式范围内提供 jsonFormat ,并在路由 DSL 中使用 complete 指令。整洁的!
不过,我也想在客户端做一些类似的事情。我正在使用主机级别 API 提供的连接池流 ( clientFlow = Http.cachedHostConnectionPool ) 发出 (HttpRequest->context(T)) 元组,如下所示:
(Source.single(request -> context)
.via(clientFlow)
.runWith(Sink.head).flatMap {
case (Success(r: HttpResponse), c: T) => Future.successful(r)
case (Failure(f), c: T) => Future.failed(f)
}, context)
HttpRequest 对象是通过其中一种 apply() 方法创建的
HttpRequest(
method = HttpMethods.POST,
uri = "/uri",
entity = HttpEntity(contentType, """{"iWish":"i was an object"}"""))
在服务器端,使用路由 DSL(在隐式范围内混合了正确的特征和 SomeCaseClass 的 jsonFormat)这看起来像:
complete(StatusCodes.BadRequest, SomeCaseClass(iWish = "i was an object"))
问:客户端 APIs/DSLs 是否有任何允许我以类似方式隐藏编组的东西?
你可以有类似下面的内容(如果你的 Format
在范围内)
Marshal(yourObject).to[RequestEntity].map { entity =>
HttpRequest(
method = HttpMethods.POST,
uri = "/uri",
entity = entity)
}
(进一步阅读here)