Поддерживает ли KMongo перечисления?

У меня есть коллекция монго, в которой есть поле String с именем role. Это поле, в частности, всегда будет заполнено одним из этих трех вариантов: 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] ERROR c.p.p.c.SpringWebConfig$simpleMappingExceptionResolver$resolver$1 - 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 перечисления в этих терминах?

Использование JavaScript и MongoDB
Использование JavaScript и MongoDB
Сегодня я собираюсь вкратце рассказать о прототипах в JavaScript, а также представить и объяснить вам работу с базой данных MongoDB.
3
0
311
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я наконец нашел решение своей проблемы. Используя библиотеку Аннотации Джексона, я могу сериализовать и десериализовать свои перечисления так, как мне нужно. В моем случае я решил использовать их как строки, чтобы KMongo знал, как с ними работать.

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

Теперь я могу просто объявить свои атрибуты как тип перечисления, чтобы KMongo знал, что с ними делать.

Другие вопросы по теме