2016-08-22 64 views
1

我有案例类Play Framework - 如何忽略Json序列化的某些字段?

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响应密码场。我怎样才能实现它?

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

回答

5

只要从Writes删除密码字段:

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

谢谢你,不同的语法,但它的作品。我试图从上面的示例中删除密码字段,但它没有编译,为什么? – Teimuraz

+0

这是由于unapply,如果你删除密码字段,参数的数量不匹配,你将不得不修改零件'(unlift(User.unapply))'。我更喜欢这种语法,因为它更容易阅读和访问对象的字段 – vdebergue

+0

谢谢,非常有帮助 – Teimuraz