是否可以强制吗啡将 ObjectId 映射到十六进制表示?
Is it possible to force morphia to map the ObjectId to the hex representation?
我目前正在研究 kotlin 多项目解决方案。
我有一个项目定义了一些数据 类 并定义了一个 api 来访问 mongodb。 objectId 是自动创建的。该项目正在使用 morphia:1.3.2。
使用此函数存储条目:
fun store(myClass: MyClass) = db.save(myClass).let { myClass.id?.toHexString() ?: "0" }
现在我在 spring-boot kotlin 项目中使用这个项目。
我创建了一个带有一些过滤器的小网页。这些过滤器应该应用于我的查询。到目前为止一切顺利。
我的查询结果是 return 通过我的 Rest-controller 编辑的,没有任何转换。在我的网页中,我想为每个结果打印 ObjectId。
但是 ObjectId 不像以前那样是一个字符串,它是一个对象。
id:
counter:15304909
date:"2018-08-27T23:45:35.000+0000"
machineIdentifier:123456
processIdentifier:1234
time:1535413535000
timeSecond:1535413535
timestamp:1535413535
是否可以强制 morphia return 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}
我有点不知所措,如何解决这个问题。
例如,根据您的 REST 框架,您需要提供一个序列化程序来将该 ObjectId 写出为其字符串版本。大多数此类框架在配置后都会使其变得透明,因此您只需担心从 REST 服务中返回对象,框架就会正确序列化。
就我个人而言,我不会试图改变它在数据库中的序列化方式。 ObjectId 是一个很好的 _id
类型,我不会更改它。
我目前正在研究 kotlin 多项目解决方案。 我有一个项目定义了一些数据 类 并定义了一个 api 来访问 mongodb。 objectId 是自动创建的。该项目正在使用 morphia:1.3.2。 使用此函数存储条目:
fun store(myClass: MyClass) = db.save(myClass).let { myClass.id?.toHexString() ?: "0" }
现在我在 spring-boot kotlin 项目中使用这个项目。 我创建了一个带有一些过滤器的小网页。这些过滤器应该应用于我的查询。到目前为止一切顺利。
我的查询结果是 return 通过我的 Rest-controller 编辑的,没有任何转换。在我的网页中,我想为每个结果打印 ObjectId。
但是 ObjectId 不像以前那样是一个字符串,它是一个对象。
id:
counter:15304909
date:"2018-08-27T23:45:35.000+0000"
machineIdentifier:123456
processIdentifier:1234
time:1535413535000
timeSecond:1535413535
timestamp:1535413535
是否可以强制 morphia return 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}
我有点不知所措,如何解决这个问题。
例如,根据您的 REST 框架,您需要提供一个序列化程序来将该 ObjectId 写出为其字符串版本。大多数此类框架在配置后都会使其变得透明,因此您只需担心从 REST 服务中返回对象,框架就会正确序列化。
就我个人而言,我不会试图改变它在数据库中的序列化方式。 ObjectId 是一个很好的 _id
类型,我不会更改它。