KMongo 是否支持枚举?
Does KMongo support enums?
我有一个 mongo 集合,其中有一个名为 role
的字符串字段。特别是此字段将始终填充以下三个选项之一:user
、admin
或 guest
.
这就是我决定创建枚举的原因,这样开发人员可以更轻松地使用它,同时将字符串值保留在数据库中。
我试图从我的集合中检索文档,希望 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 就知道如何处理它们。
我有一个 mongo 集合,其中有一个名为 role
的字符串字段。特别是此字段将始终填充以下三个选项之一:user
、admin
或 guest
.
这就是我决定创建枚举的原因,这样开发人员可以更轻松地使用它,同时将字符串值保留在数据库中。
我试图从我的集合中检索文档,希望 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 就知道如何处理它们。