我正在尝试使用akka-http,circe和akka-http-json(特别是akkka-http-circe)进行简单的REST API调用。
import io.circe.generic.auto._
object Blah extends FailFastCirceSupport {
//...
val fut: Future[Json] = Http().singleRequest(HttpRequest(uri = uri))
我希望akka-http-circe
能够弄清楚如何将HttpResponse
放置到我想要的类型(此处,只是Json
)。但这不会编译。
所以我查看了一些文档和示例,并尝试了一下:
val fut: Future[Json] = Http().singleRequest(HttpRequest(uri = uri)).flatMap(Unmarshal(_).to)
给出:type mismatch; found 'Future[HttpResponse]', required 'Future[Json]'
。我应该如何揭露获取的unmarshaller?
scala 2.12.4,akka-http 10.0.10,akka-http-circe 1.18.0
工作代码似乎是:
val fut: Future[Json] = Http().singleRequest(HttpRequest(uri = uri)).flatMap(Unmarshal(_).to[Json])
明确给出了目标类型时,编译器会找到必要的Unmarshallers,这起作用。它与自定义类型代替Json
同样工作。
进一步的问题:这是这样做的最佳方法吗?