我有一个mongo集合,其中有一个名为role
的String字段。尤其是,此字段始终会填充以下三个选项之一:user
,admin
或guest
。
这就是我决定创建一个枚举的原因,以便使开发人员更轻松地使用它,同时将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是否支持这些术语中的枚举?
答案 0 :(得分:0)
所以我终于找到了解决我问题的方法。使用Jackson Annotations库,我可以按需要的方式对枚举进行序列化和反序列化。就我而言,我选择将它们用作字符串,以便KMongo知道如何使用它们。
@JsonFormat(shape = JsonFormat.Shape.STRING)
enum class Role {
user,
admin,
guest
}
现在我可以将属性声明为枚举类型,以便KMongo知道如何处理它们。