Преобразование данных в строку в класс Case? - PullRequest
0 голосов
/ 10 марта 2019

У меня есть пространство ключей и таблица cassandra, которые выглядят следующим образом:

CREATE KEYSPACE animals WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};
--
USE animals;

CREATE TABLE alpakka (
  id int PRIMARY KEY,
  name text,
  animal_type text
  );

Я пытаюсь использовать datastax и Alpakka для получения всех результатов из этой таблицы, например:

object CassandraService {

    def selectFromCassandra()(): Future[Seq[Row]] = {

      val statement: Statement = new SimpleStatement(s"SELECT * FROM animals.alpakka")

      val rows: Future[immutable.Seq[Row]] = CassandraSource(statement).runWith(Sink.seq)
    rows

}

Когда я получаю результаты обратно, я хочу привести их к классу дел с использованием Circe следующим образом:

import io.circe.{Decoder, Encoder}

import io.circe.generic.semiauto._


object Alpakka {
  implicit val jsonDecoder: Decoder[Alpakka] = deriveDecoder[Alpakka]
  implicit val jsonEncoder: Encoder[Alpakka] = deriveEncoder[Alpakka]
}

case class Alpakka(id:Int,name:String,animal_type:String)

Затем я вызываю службу по следующему маршруту:

object Routes {

val routes: Route = path("routes"){

  onSuccess(CassandraService.selectFromCassandra()) { seq =>
    complete(seq.head.asInstanceOf[Alpakka].name)

  }
}

Однако, когда я делаю это, я получаю следующую ошибку:

Error during processing of request: 'com.datastax.driver.core.ArrayBackedRow cannot be cast to com.nk.map.model.Alpakka'. Completing with 500 Internal Server Error response. To change default exception handling behavior, provide a custom ExceptionHandler.
java.lang.ClassCastException: com.datastax.driver.core.ArrayBackedRow cannot be cast to com.nk.map.model.Alpakka

Я не уверен, что делаю неправильно - благодарен за любые указания!

...