Драйвер MongoDB Scala - проблема с полем Set - PullRequest
0 голосов
/ 19 февраля 2019

У меня есть класс падежа, который имеет 4 набора полей.

case class Config(_id: Option[ObjectId] = None,
                            var locations: Set[Location] = Set(),
                            var languages: Set[Language] = Set(),
                            var workAreas: Set[WorkArea] = Set(),
                            var websites: Set[WebSite] = Set()) {}

Параметры типа также являются классами падежей.Конфигурация соединения с базой данных выглядит следующим образом:

private val customCodecs = fromProviders(
    classOf[Config],
    classOf[Language],
    classOf[Location],
    classOf[JobPortal],
    classOf[WorkArea]
  )

  private val javaCodecs =
    fromCodecs(new LocalDateTimeDateCodec(), new LocalDateDateCodec())

  private val codecRegistry =
    fromRegistries(customCodecs, javaCodecs, DEFAULT_CODEC_REGISTRY)

  val dbConnection = MongoClient(dbURI)

  val database: MongoDatabase =
    dbConnection.getDatabase(dbName).withCodecRegistry(codecRegistry)

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

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[ClassCastException: scala.collection.immutable.$colon$colon cannot be cast to scala.collection.immutable.Set]]
        at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:251)
        at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:178)
        at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:363)
        at play.core.server.AkkaHttpServer$$anonfun$1.applyOrElse(AkkaHttpServer.scala:361)
        at scala.concurrent.Future.$anonfun$recoverWith$1(Future.scala:413)
        at scala.concurrent.impl.Promise.$anonfun$transformWith$1(Promise.scala:37)
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:60)
        at akka.dispatch.BatchingExecutor$AbstractBatch.processBatch(BatchingExecutor.scala:55)
        at akka.dispatch.BatchingExecutor$BlockableBatch.$anonfun$run$1(BatchingExecutor.scala:91)
        at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
Caused by: java.lang.ClassCastException: scala.collection.immutable.$colon$colon cannot be cast to scala.collection.immutable.Set
        at repository.MongoFactory$$anon$5$ConfigMacroCodec$3.getInstance(MongoFactory.scala:20)
        at repository.MongoFactory$$anon$5$ConfigMacroCodec$3.getInstance(MongoFactory.scala:20)
        at org.mongodb.scala.bson.codecs.macrocodecs.MacroCodec.decode(MacroCodec.scala:110)
        at org.mongodb.scala.bson.codecs.macrocodecs.MacroCodec.decode$(MacroCodec.scala:95)
        at repository.MongoFactory$$anon$5$ConfigMacroCodec$3.decode(MongoFactory.scala:20)
        at com.mongodb.operation.CommandResultArrayCodec.decode(CommandResultArrayCodec.java:52)
        at com.mongodb.operation.CommandResultDocumentCodec.readValue(CommandResultDocumentCodec.java:60)
        at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:84)
        at org.bson.codecs.BsonDocumentCodec.decode(BsonDocumentCodec.java:41)
        at org.bson.codecs.configuration.LazyCodec.decode(LazyCodec.java:47)

Нужен ли мне собственный кодек для наборов?

...