Результат декодирования Akka Http / Circe

Прошу прощения, если мне не хватает чего-то простого, но я пытаюсь использовать Akka HTTP с Circe (используя https://github.com/hseeberger/akka-http-json модуль Circe). Я пытаюсь получить результаты вызова GET в ScalaTest, который смешивается с чертой ErrorAccumulatingCirceSupport. Вызов проходит успешно, но я не могу демаршалировать ответ ... Это довольно простой тест, но я просто не уверен, как демаршалировать результаты в список объектов домена, например:

    Get("/path/to/getfoos").withHeaders(auth) ~> Route.seal(service.route) ~> check {
      import io.circe.generic.auto._
      status shouldEqual StatusCodes.OK
      contentType should ===(ContentTypes.`application/json`)
      val reports = responseAs[List[Foo]]
      reports.size shouldBe 1
   }

Я получаю следующее сообщение об ошибке:

Could not unmarshal response to type 'scala.collection.immutable.List' for `responseAs` assertion: de.heikoseeberger.akkahttpcirce.ErrorAccumulatingCirceSupport$DecodingFailures: DecodingFailure at [0]: CNil

Если кто-то может указать, в чем я ошибаюсь, я был бы очень признателен за помощь!

Спасибо!


person Timothy Perrigo    schedule 07.02.2019    source источник
comment
Вы можете поделиться своим Foo определением?   -  person Travis Brown    schedule 07.02.2019
comment
@TravisBrown: Foo на самом деле является ADT (подтип класса case of a sealed trait), состоящий из других ADT, хотя ни один из них не является очень сложным. Мне удалось заставить его работать, получив HttpEntity и используя на нем Unmarshal (я отправлю код ниже на случай, если есть лучший способ решить эту проблему). Спасибо за ответ!   -  person Timothy Perrigo    schedule 07.02.2019


Ответы (1)


Я не уверен, что это лучший способ, но мне удалось неупорядочить мои классы случаев, используя что-то вроде следующего; если есть способ получше, дайте мне знать!

      val entity = responseEntity
      val foos: List[Foo] = Unmarshal(entity).to[List[Foo]].futureValue
      foos(0) shouldBe expectedFoo
      foos.size shouldBe 1

(Обратите внимание, что мне также пришлось смешать черту org.scalatest.concurrent.ScalaFutures)

person Timothy Perrigo    schedule 07.02.2019