是否可以强制语素将ObjectId映射到十六进制表示形式?

时间:2018-08-28 07:43:41

标签: javascript mongodb spring-boot kotlin morphia

我目前正在研究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}    

我有点想法,如何解决此问题。

1 个答案:

答案 0 :(得分:0)

取决于您的REST框架,您将需要提供一个序列化程序,以便将该ObjectId写入其String版本。配置后,大多数此类框架都会使该透明化,因此您只需要担心将对象从REST服务中退回,该框架将正确序列化。

我个人不会因为尝试更改数据库中的序列化方式而感到失望。 ObjectId是一种非常不错的_id类型,我不会更改。