В настоящее время я работаю над мультипроектным решением kotlin.
У меня есть один проект, определяющий некоторые классы данных и определяющий API для доступа к mongodb. ObjectId создается автоматически. Этот проект использует morphia: 1.3.2.
Записи хранятся с использованием этой функции:
fun store(myClass: MyClass) = db.save(myClass).let { myClass.id?.toHexString() ?: "0" }
Сейчас я использую этот проект в проекте весенней загрузки kotlin.
Я создал небольшую веб-страницу с некоторыми фильтрами. Эти фильтры должны быть применены к моему запросу. Пока все хорошо, все работает.
Результаты моего запроса возвращаются через мой Rest-контроллер без каких-либо преобразований. На моей веб-странице я хочу напечатать результат foreach ObjectId.
Но ObjectId - это не строка, как раньше, это объект.
id:
counter:15304909
date:"2018-08-27T23:45:35.000+0000"
machineIdentifier:123456
processIdentifier:1234
time:1535413535000
timeSecond:1535413535
timestamp:1535413535
Можно ли заставить morphia вернуть objectId в представлении String? Или есть опция для активации правильного сопоставления? Или мне нужно прикасаться к каждому результату один за другим и преобразовывать идентификатор объекта в шестнадцатеричное строковое представление? Я надеюсь, что есть лучшее и более быстрое решение, чем это.
Я также не могу переназначить объект на действительный идентификатор из-за исключения java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
. Запрос выглядит так:
myClass?id={"timestamp":1535413631,"machineIdentifier":123456,"processIdentifier":1234,"counter":16576969,"time":1535413631000,"date":"2018-08-27T23:47:11.000+0000","timeSecond":1535413631}
Я немного не в курсе, как решить эту проблему.