Я использую PlayFramework 2.6 со SCALA и mongodb-драйвером.
Борьба с сериализацией Eumeration при записи.
При попытке вставить объект, содержащий поля перечисления, я получаю исключение:
Caused by: org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class scala.Enumeration$Val.
at org.bson.codecs.configuration.CodecCache.getOrThrow(CodecCache.java:46)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:63)
at org.bson.codecs.configuration.ProvidersCodecRegistry.get(ProvidersCodecRegistry.java:37)
at org.mongodb.scala.bson.codecs.macrocodecs.MacroCodec.writeValue(MacroCodec.scala:167)
at org.mongodb.scala.bson.codecs.macrocodecs.MacroCodec.writeValue$(MacroCodec.scala:162)
Я создал кодеки для самого объекта, также попытался создать кодек для типа перечислимого класса, но выглядит это правильно.
val routeTypeCodec: CodecProvider = Macros.createCodecProvider[RouteTypeClass]
val routeCodec: CodecProvider = Macros.createCodecProviderIgnoreNone[Route]
перечисление:
class RouteTypeClass extends TypeReference[RouteType.type]
object RouteType extends Enumeration {
type RouteType = Value
val Repeat, OneTime = Value
}
объект для сохранения:
case class Route(
...
routeType: RouteType
...
);
Как записать кодек для полей перечисления, кроме определения этого поля как строки.