【问题标题】:Play Framework - how to ignore some fields for Json Serialisation?Play Framework - 如何忽略 Json 序列化的某些字段?
【发布时间】:2016-08-22 22:47:39
【问题描述】:

我有案例课

case class User (
  id: Option[Long] = None,
  username: String,     
  password: Option[String] = None,
)

这里是这个案例类的 json 序列化器

object User {
  implicit val userWrites: Writes[User] = (
      (JsPath \ "id").write[Option[Long]] and
      (JsPath \ "username").write[String] and     
      (JsPath \ "password").write[Option[String]] and
    )(unlift(User.unapply))
}

但我不想在 api 响应中公开 password 字段。我怎样才能实现它?

我也用它来让 Slick 在适当的表中读/写数据,我在很多地方使用它,服务层,控制器层,我不想为 api 响应创建单独的类(没有密码)。

【问题讨论】:

    标签: playframework jsonserializer


    【解决方案1】:

    只需从您的Writes 中删除密码字段:

    implicit val userWrites: Writes[User] = Writes { user =>
      Json.obj(
        "id" -> user.id,
        "username" -> user.username
      )
    }
    

    【讨论】:

    • 谢谢,不同的语法,但它有效。我试图从上面的示例中删除密码字段,但它没有编译,这是为什么呢?
    • 那是因为unapply,如果你去掉密码字段,参数的数量将不匹配,你必须修改(unlift(User.unapply))部分。我更喜欢这种语法,因为它更容易阅读和访问对象的字段
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 2021-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多