Я пытаюсь получить список ints [1,2,3,...]
от JSON api, но я вижу, что преобразование в общий тип не работает, и документация Spray показывает только unmarshalling для определенного объекта. Любые идеи о том, как заставить его работать/что делать Google, чтобы получить ответ?Scala, Spray - Unmarshalling to List [Int]
API конечных точек: https://hacker-news.firebaseio.com/v0/newstories.json
import java.io.IOException
import akka.actor.ActorSystem
import akka.http.scaladsl.Http
import akka.http.scaladsl.unmarshalling.Unmarshal
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Flow, Sink, Source}
import akka.http.scaladsl.model.{HttpResponse, HttpRequest}
import com.typesafe.config.ConfigFactory
import akka.http.scaladsl.model.StatusCodes._
import spray.json.DefaultJsonProtocol._
import spray.json._
import akka.http.scaladsl.client.RequestBuilding
import scala.concurrent.Future
object NewsDaemon extends App{
val config = ConfigFactory.load()
implicit val system = ActorSystem()
implicit val executor = system.dispatcher
implicit val materializer = ActorMaterializer()
case class HNResultList(items: List[Int])
val hnConnectionFlow: Flow[HttpRequest, HttpResponse, Any] =
Http().outgoingConnectionTls(config.getString("services.hnApiHost"))
def hnApiRequest (request: HttpRequest) : Future[HttpResponse] = Source.single(request).via(hnConnectionFlow).runWith(Sink.head)
hnApiRequest(RequestBuilding.Get("/v0/topstories.json?print=pretty")).flatMap { response =>
response.status match {
case OK => Unmarshal(response.entity).to[List[Int]].map(println)
case _ => Unmarshal(response.entity).to[String].flatMap { entity =>
val error = s"HN API request failed with status code ${response.status} and entity $entity"
Future.failed(new IOException(error))
}
}
}
}
Спасибо! Теперь работает. –