是否可以强制morphia将ObjectId映射到十六进制表示?

问题描述 投票:0回答:1

我目前正在研究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 foreach结果。

但是ObjectId不像以前那样是String,它是一个对象。

id:
  counter:15304909
  date:"2018-08-27T23:45:35.000+0000"
  machineIdentifier:123456
  processIdentifier:1234
  time:1535413535000
  timeSecond:1535413535
  timestamp:1535413535

是否可以强制morphia在String表示中返回objectId?或者有一个选项来激活正确的映射?或者我是否必须逐个触摸每个结果并将对象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}    

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

javascript mongodb spring-boot kotlin morphia
1个回答
0
投票

根据您的REST框架,您需要提供一个序列化程序,用于将ObjectId写为String版本。大多数此类框架在配置后都会变得透明,因此您只需担心将对象从REST服务中返回,框架将正确序列化。

我个人不会试图改变它在数据库中的序列化方式。 ObjectId是一个非常好的_id类型,我不会改变它。

© www.soinside.com 2019 - 2024. All rights reserved.