带有 Play 2.4 / Scala 的 Json 格式
Posted
技术标签:
【中文标题】带有 Play 2.4 / Scala 的 Json 格式【英文标题】:Json format with Play 2.4 / Scala 【发布时间】:2015-07-21 10:01:32 【问题描述】:我知道这个问题已经被问过一千次了,但我不明白为什么这段代码不能正常工作。
case class Partner
(_id: Option[BSONObjectID], name: String, beacon: Option[Beacon])
class PartnerFormatter @Inject() (val beaconDao: BeaconDao)
implicit val partnerReads: Reads[Partner] = (
(__ \ "_id").readNullable[String]and
(__ \ "name").read[String] and
(__ \ "beacon").read[String]
)((_id, name, beaconID) => Partner(_id.map(BSONObjectID(_)), name, Await.result(beaconDao.findById(beaconID), 1 second))))
implicit val partnerWrites: Writes[Partner] = (
(JsPath \ "_id").writeNullable[String].contramap((id: Option[BSONObjectID]) => Some(id.get.stringify)) and
(JsPath \ "name").write[String] and
(JsPath \ "beacon").writeNullable[String].contramap((beacon: Option[Beacon]) => Some(beacon.get._id.get.stringify))
)(unlift(Partner.unapply))
我正面临着
No Json deserializer found for type models.Partner. Try to implement an implicit Reads or Format for this type
或者
No Json deserializer found for type models.Partner. Try to implement an implicit Writes or Format for this type
它不应该工作吗?
【问题讨论】:
确保这些隐式确实存在于转换发生的地方 是的,我不确定 Play 的详细信息,但使用 Spray 通常我会丢失一些导入。我刚刚自己在 AkkaHttp 服务上修复了同样的问题,它在文件顶部缺少这个导入:import akka.http.scaladsl.marshallers.sprayjson.SprayJsonSupport._ 我希望这能让你走上正确的轨道 如果可以,请尝试在 Partner 的伴随对象中定义隐式。 我可以让它工作,但不使用隐式属性。我指定它。但是我知道在其他简单的项目中,导入可以解决问题,但在这里不行。我认为这是同伴的类而不是对象 【参考方案1】:您需要在 Partnerobject 中定义读取器和写入器。
这是一个例子,https://github.com/luongbalinh/play-mongo/blob/master/app/models/User.scala
【讨论】:
我怀疑它。顺便说一句,我更改了我的代码,所以我不再需要了,但感谢您的回复:)以上是关于带有 Play 2.4 / Scala 的 Json 格式的主要内容,如果未能解决你的问题,请参考以下文章
在 Play Framework 2.4 中为 Scala 实现 Akka
在 Play Framework 2.4 中为 Scala 实现 CORS