Давайте представим, что у меня есть такой класс case:
case class Product(ean: Long, name: String, description: String)
и я хочу сериализовать объекты этого класса в Json, я могу реализовать трейт Writes следующим образом:
implicit val productWrites: Writes[Product] = (
(JsPath \ "ean").write[Long] and
(JsPath \ "name").write[String] and
(JsPath \ "description").write[String]
)(unlift(Product.unapply))
Это прекрасно работает, если я хочу сериализовать все атрибуты объекта. Теперь скажем, я не хочу сериализовать файл ean
. Я пробовал что-то вроде этого:
implicit val productWrites: Writes[Product] = (
(JsPath \ "name").write[String] and
(JsPath \ "description").write[String]
)(unlift(Product.unapply))
Похоже, это не работает, так как нужно использовать все поля/атрибуты, которые возвращает метод unapply.
Есть ли способ заставить второй метод сериализации работать только с атрибутами, которые я хочу сериализовать, или мне нужно использовать что-то вроде этого:
implicit object ProductWrites extends Writes[Product] {
def writes(p: Product) = Json.obj(
"name" -> Json.toJson(p.name),
"description" -> Json.toJson(p.description)
)
}
Это единственный способ?