У меня есть пространство ключей и таблица 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
Я не уверен, что делаю неправильно - благодарен за любые указания!