KMongo 是否支持枚举?

Does KMongo support enums?

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

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

我试图从我的集合中检索文档,希望 KMongo 能够从字符串解析为枚举 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] ERROR c.p.p.c.SpringWebConfig$simpleMappingExceptionResolver$resolver - Excepción general resolviendo una petición com.fasterxml.jackson.module.kotlin.MissingKotlinParameterException: Instantiation of [simple type, class com.foo.user.User] value failed for JSON property role due to missing (therefore NULL) value for creator parameter role which is a non-nullable type at [Source: de.undercouch.bson4jackson.io.LittleEndianInputStream@3195529c; pos: 275] (through reference chain: com.foo.user.User["Role"])

所以我的问题是:KMongo 在这些方面是否支持枚举?

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

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

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