2016-08-22 10 views
1

私はケースクラスPlay Framework - Json Serializationのいくつかのフィールドを無視するにはどうすればよいですか?

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

そして、ここでは、このケースクラス

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)) 
} 

ためのJSONシリアライザであるしかし、私は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

関連する問題