Можно ли заставить morphia отобразить ObjectId в шестнадцатеричное представление? - PullRequest
0 голосов
/ 28 августа 2018

В настоящее время я работаю над мультипроектным решением 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}    

Я немного не в курсе, как решить эту проблему.

1 Ответ

0 голосов
/ 28 августа 2018

В зависимости от вашей среды REST, вам может потребоваться предоставить сериализатор для записи этого ObjectId в качестве его String-версии, скажем. Большинство таких платформ делают это прозрачным после его настройки, поэтому вам нужно только беспокоиться о возврате ваших объектов из службы REST, и каркас будет сериализован должным образом.

Лично я бы не стал облажаться, пытаясь изменить способ сериализации в базе данных. ObjectId - довольно хороший тип _id, и я бы не стал его менять.

...