KMongo поддерживает перечисления? - PullRequest
1 голос
/ 21 мая 2019

У меня есть коллекция монго, в которой есть поле 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] ОШИБКА cppcSpringWebConfig $ simpleMappingExceptionResolver $ resolver $ 1 - Исключение - общее разрешение, исключающее возможность получения com.fasterxml.jackson.mostan.kotlin.MisstiK of ofment:Значение [простой тип, класс com.foo.user.User] для роли свойства JSON не выполнено из-за отсутствия (поэтому NULL) значения для роли параметра создателя, которая является ненулевым типом в [Source: de.undercouch.bson4jackson.io.LittleEndianInputStream@3195529c;pos: 275] (через цепочку ссылок: com.foo.user.User ["Role"])

Итак, мой вопрос: поддерживает ли KMongo перечисления в этих терминах?

1 Ответ

0 голосов
/ 13 июня 2019

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

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

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

...