Как использовать akka-http-circe для вызовов на стороне клиента?

Я пытаюсь выполнить простой вызов REST API, используя akka-http, circe и https://github.com/hseeberger/akka-http-json (в частности, akka-http-circe).

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]'. Как выставить немаршаллер на фетч?

Scala 2.12.4, akka-http 10.0.10, akka-http-circe 1.18.0


person akauppi    schedule 23.11.2017    source источник


Ответы (1)


Рабочий код выглядит так:

val fut: Future[Json] = Http().singleRequest(HttpRequest(uri = uri)).flatMap(Unmarshal(_).to[Json])

Когда целевой тип указан явно, компилятор находит необходимые демаршаллеры, и это работает. Он одинаково работает с настраиваемым типом вместо Json.

Дальнейший вопрос: это лучший способ сделать это?

person akauppi    schedule 23.11.2017