3

我有一个 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] 错误 cppcSpringWebConfig$simpleMappingExceptionResolver$resolver$1 - Excepción general resolviendo una petición com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: 实例化 [simple type, class com.foo.user.User] JSON 属性角色的值失败,因为缺少(因此为 NULL)创建者参数角色的值,该角色是 [来源:de.undercouch.bson4jackson.io.LittleEndianInputStream@ 3195529c; pos: 275] (通过引用链: com.foo.user.User["Role"])

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

4

1 回答 1

1

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

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

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

于 2019-06-13T08:11:28.840 回答