我可以在 Play Framework 2.4 中从两个没有转换器的模型中编写 Json
Posted
技术标签:
【中文标题】我可以在 Play Framework 2.4 中从两个没有转换器的模型中编写 Json【英文标题】:Can I write Json from two model without transformers in Play Framework 2.4 【发布时间】:2015-12-16 12:10:13 【问题描述】:我有两个model classes
case class Calendar(id: String, summary: String)
case class ACL(account: String, role: String)
我想写Json
"id": "some id",
"summary": "some text",
"acl": [
"user": "some user",
"role": "some role"
]
没有 Json transformers
。
现在我有
val calendar = ...
val acl = ...
val calendarWrite = (
(__ \ "_id").write[String] and
(__ \ "summary").write[String]
)(unlift(Calendar.unapply))
val aclWrite = (
(__ \ "user").write[String] and
(__ \ "role").write[String]
)(unlift(ACL.unapply))
val updateForMongo =
__.json.update(
(__ \ "acl" ).json.put(
JsArray( Seq( aclWrite.writes(acl) ))
)
)
calendarWrite.writes(calendar)
.transform(updateForMongo)
.fold(
invalid =>
Future.successful(0),
valid =>
calendarsCollection.insert(valid).map(l => l.n)
)
是否有可能将多个对象写入写入流?
那么“一个领域”模型类呢?我可以写自定义Write
,有什么解决方法吗?
【问题讨论】:
【参考方案1】:如果您忘记了各种转换器和更常用的术语并在JsObject
源中查看,这是一个简单的问题。
++
、-
、+
、deepMerge
这就是你所需要的。
calendarWrite.writes(calendar) + ("acl" -> JsArray(Seq( aclWrite.writes(acl) )))
对于“一个字段”模型类:
case class NotificationSettings(notifications: Seq[Notification])
val nwrite = new Writes[NotificationSettings]
override def writes(o: NotificationSettings): JsValue =
Json.obj("notifications" -> o.notifications)
【讨论】:
以上是关于我可以在 Play Framework 2.4 中从两个没有转换器的模型中编写 Json的主要内容,如果未能解决你的问题,请参考以下文章
如何在 play framework(scala) 2.4 中获取当前会话或请求对象?
在 Play Framework 2.4 中为 Scala 实现 Akka