2016-08-22 49 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

相關問題