KMongo支持枚举吗?

时间:2019-05-21 10:42:47

标签: mongodb kotlin enums kmongo

我有一个mongo集合,其中有一个名为role的String字段。尤其是,此字段始终会填充以下三个选项之一:useradminguest

这就是我决定创建一个枚举的原因,以便使开发人员更轻松地使用它,同时将String值保留在数据库中。

我试图从集合中检索文档,希望KMongo能够将其从String解析为Enum Role,反之亦然。

可悲的是,KMongo似乎无法做到。

data class User(var role: Role,  // 0 user, 1 admin, 2 guest
                var email: String,
                var password: String)

enum class Role{
    user,
    admin,
    guest
}

当我尝试通过_id查找文档时,收到此消息:

  

2019-05-21 11:39:01 [http-nio-8080-exec-1]错误   c.p.p.c.SpringWebConfig $ simpleMappingExceptionResolver $ resolver $ 1-   卓越的一般解决方案   com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException:   [简单类型,类com.foo.user.User]值的实例化失败   JSON属性角色,因为缺少(因此为NULL)值   创建者参数角色,在[来源:   de.undercouch.bson4jackson.io.LittleEndianInputStream@3195529c;位置:   275](通过引用链:com.foo.user.User [“角色”])

所以我的问题是:KMongo是否支持这些术语中的枚举?

1 个答案:

答案 0 :(得分:0)

所以我终于找到了解决我问题的方法。使用Jackson Annotations库,我可以按需要的方式对枚举进行序列化和反序列化。就我而言,我选择将它们用作字符串,以便KMongo知道如何使用它们。

@JsonFormat(shape = JsonFormat.Shape.STRING)
enum class Role {
    user,
    admin,
    guest
}

现在我可以将属性声明为枚举类型,以便KMongo知道如何处理它们。