覆盖 Play JSON Combinator Writes 的值
Posted
技术标签:
【中文标题】覆盖 Play JSON Combinator Writes 的值【英文标题】:Overwrite value of Play JSON Combinator Writes 【发布时间】:2015-10-25 19:13:12 【问题描述】:假设我有一个这样写的 json
implicit val userWrites: Writes[User] = (
(__ \ "name").write[String] ~
(__ \ "email").write[String] ~
(__ \ "encryptedPassword").write[String] ~
(__ \ "id").writeNullable[Long]
)(unlift(User.unapply))
如果我不想打印密码,而只是打印一个字符串"hidden"
,我该如何使用组合器来实现呢?
我正在寻找与此类似的解决方案
implicit val userWrites: Writes[User] = (
(__ \ "name").write[String] ~
(__ \ "email").write[String] ~
(__ \ "encryptedPassword").write[String](Writes.pure("hidden")) ~
(__ \ "id").writeNullable[Long]
)(unlift(User.unapply))
【问题讨论】:
【参考方案1】:你可以这样做:
implicit val userWrites = new Writes[User]
override def writes(user: User): JsValue = Json.obj(
"name" -> user.name,
"email" -> user.email,
"encryptedPassword" -> "hidden",
"id" -> user.id
)
【讨论】:
【参考方案2】:这应该可行:
implicit val userWrites: Writes[User] = (
(__ \ "name").write[String] ~
(__ \ "email").write[String] ~
(__ \ "encryptedPassword").write[String](Writes((_: String) => JsString("hidden"))) ~
(__ \ "id").writeNullable[Long]
)(unlift(User.unapply))
【讨论】:
谢谢@Grisuu。这是我一直在寻找的答案。但是,我发现为不同的场景创建不同的类是更好的做法,并且只使用默认的 JSON 读取和 JSON 写入。这比编写一堆 JSON 映射代码要干净得多。以上是关于覆盖 Play JSON Combinator Writes 的值的主要内容,如果未能解决你的问题,请参考以下文章
markdown 使用Javascript向Y Combinator介绍
[Javascript] Improve Composition with the Compose Combinator