【问题标题】:Is it possible to force morphia to map the ObjectId to the hex representation?是否可以强制 morphia 将 ObjectId 映射到十六进制表示?
【发布时间】:2019-02-02 18:36:47
【问题描述】:

我目前正在开发一个 kotlin 多项目解决方案。 我有一个项目定义了一些数据类并定义了一个 api 来访问 mongodb。 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?还是有一个 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}    

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

【问题讨论】:

    标签: javascript mongodb spring-boot kotlin morphia


    【解决方案1】:

    例如,根据您的 REST 框架,您需要提供一个序列化程序来将该 ObjectId 写为其字符串版本。大多数此类框架在配置后就会使其透明化,因此您只需担心将对象从 REST 服务中返回,框架就会正确序列化。

    就我个人而言,我不会试图更改它在数据库中的序列化方式。 ObjectId 是一个很好的_id 类型,我不会更改它。

    【讨论】:

    • 使用正确的关键字是一件容易的事。这可能有一天会帮助某人:link
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 2016-07-24
    • 2017-08-10
    相关资源
    最近更新 更多