2016-08-22 3 views
1

У меня есть случай классPlay Framework - как игнорировать некоторые поля для Json Serialization?

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

А вот serialiser для 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

Это из-за несовместимости, количество аргументов не будет соответствовать, если вы удалите поле пароля, вам придется изменить часть '(unlift (User.unapply))'. Я предпочитаю этот синтаксис, так как его легче читать и получать доступ к полю вашего объекта. – vdebergue

+0

Спасибо, очень полезно – Teimuraz

Смежные вопросы