Search code examples
jsonplayframeworkplayframework-2.4

Overwrite value of Play JSON Combinator Writes


Suppose I have a json writes like this

  implicit val userWrites: Writes[User] = (
    (__ \ "name").write[String] ~
      (__ \ "email").write[String] ~
      (__ \ "encryptedPassword").write[String] ~
      (__ \ "id").writeNullable[Long]
    )(unlift(User.unapply))

If I don't want to printout the password, and instead just print a string "hidden", how can I achieve this with combinator?

I am looking for a solution that looks similar to this

  implicit val userWrites: Writes[User] = (
    (__ \ "name").write[String] ~
      (__ \ "email").write[String] ~
      (__ \ "encryptedPassword").write[String](Writes.pure("hidden")) ~
      (__ \ "id").writeNullable[Long]
    )(unlift(User.unapply))

Solution

  • This should work:

    implicit val userWrites: Writes[User] = (
        (__ \ "name").write[String] ~
          (__ \ "email").write[String] ~
          (__ \ "encryptedPassword").write[String](Writes((_: String) => JsString("hidden"))) ~
          (__ \ "id").writeNullable[Long]
        )(unlift(User.unapply))