gpt4 book ai didi

scala - 没有找到 Scala 的 Json 格式化程序, Play Framework 错误

转载 作者:行者123 更新时间:2023-12-04 15:13:13 24 4
gpt4 key购买 nike

我有以下两个隐式。

implicit val readObjectIdFormat = new Reads[ObjectId] {
def reads(jv: JsValue): JsResult[ObjectId] = {
JsSuccess(new ObjectId(jv.as[String]))
}
}

implicit val visitorFormat = (
(__ \ "_id").formatOpt[ObjectId] and
(__ \ "visitorId").format[String] and
(__ \ "referralUrl").formatOpt[String] and
(__ \ "ipAddress").formatOpt[String] and
(__ \ "promotionId").format[String])(Visitor)

尽管 readObjectIdFormat 是在编译时定义的,但它一直在 "(__\"_id").formatOpt[ObjectId]"行上提示

找不到类型 org.bson.types.ObjectId 的 Json 格式化程序。尝试实现一个隐式
此类型的格式。


版本: Play 2.1-RC2,Scala 2.10

知道为什么它不能识别 readObjectIdFormat 吗?

最佳答案

其他人给出了很好的答案,请改用 Format 。
顺便说一下,您可以处理解析错误。

这个实现对我来说很好用:

  implicit val objectIdFormat: Format[ObjectId] = new Format[ObjectId] {

def reads(json: JsValue) = {
json match {
case jsString: JsString => {
if ( ObjectId.isValid(jsString.value) ) JsSuccess(new ObjectId(jsString.value))
else JsError("Invalid ObjectId")
}
case other => JsError("Can't parse json path as an ObjectId. Json content = " + other.toString())
}
}

def writes(oId: ObjectId): JsValue = {
JsString(oId.toString)
}

}

关于scala - 没有找到 Scala 的 Json 格式化程序, Play Framework 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14700103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com