我目前正在研究Kotlin多项目解决方案。 我有一个项目定义了一些数据类并定义了一个访问mongodb的api。 objectId是自动创建的。该项目使用了morphia:1.3.2。 使用此功能存储条目:
fun store(myClass: MyClass) = db.save(myClass).let { myClass.id?.toHexString() ?: "0" }
现在,我在spring-boot kotlin项目中使用此项目。 我创建了一个带有一些过滤器的小型网页。这些过滤器应应用于我的查询。到目前为止,一切正常。
查询的结果通过我的Rest-controller返回,没有任何转换。在我的网页中,我想为每个结果打印ObjectId。
但是ObjectId不是以前的String,而是一个对象。
id:
counter:15304909
date:"2018-08-27T23:45:35.000+0000"
machineIdentifier:123456
processIdentifier:1234
time:1535413535000
timeSecond:1535413535
timestamp:1535413535
是否可以强制语素返回String表示形式中的objectId?还是有一个on选项激活正确的映射?还是我必须一一触摸每个结果,然后将对象ID转换为十六进制字符串表示形式?我希望有一个更好,更快的解决方案。
由于java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
异常,我也无法将对象重新映射为有效的ID。该请求看起来像这样:
myClass?id={"timestamp":1535413631,"machineIdentifier":123456,"processIdentifier":1234,"counter":16576969,"time":1535413631000,"date":"2018-08-27T23:47:11.000+0000","timeSecond":1535413631}
我有点想法,如何解决此问题。
答案 0 :(得分:0)
取决于您的REST框架,您将需要提供一个序列化程序,以便将该ObjectId写入其String版本。配置后,大多数此类框架都会使该透明化,因此您只需要担心将对象从REST服务中退回,该框架将正确序列化。
我个人不会因为尝试更改数据库中的序列化方式而感到失望。 ObjectId是一种非常不错的_id
类型,我不会更改。