【问题标题】:Does KMongo support enums?KMongo 是否支持枚举?
【发布时间】:2019-05-21 10:42:46
【问题描述】:

我有一个 mongo 集合,其中有一个名为 role 的字符串字段。尤其是该字段将始终使用以下三个选项之一填充:useradminguest

这就是我决定创建枚举的原因,以便开发人员更容易使用它,同时将字符串值保留在数据库中。

我试图从我的集合中检索一个文档,期望 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 - Excepción general resolviendo una petición com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: [simple type, class com.foo.user.User] 值的实例化失败 由于缺少(因此为 NULL)值而导致的 JSON 属性角色 creator 参数角色,它是 [Source: de.undercouch.bson4jackson.io.LittleEndianInputStream@3195529c;位置: 275](通过引用链:com.foo.user.User["Role"])

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

【问题讨论】:

    标签: mongodb kotlin enums kmongo


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 2011-03-10
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 2015-05-12
      • 1970-01-01
      • 2017-04-02
      • 2023-02-07
      相关资源
      最近更新 更多