#scala #playframework
#scala #playframework
Вопрос:
У меня есть case class
со счетом (сумма всех оценок обзора) и количеством (отзывов) отзывов
case class Rating(score: Long = 0L, count: Int = 0) {
def total():Long = if (count == 0) 0L else score/count;
}
и я хочу поддерживать следующий формат json для сериализации
{
"score": 100,
"count": 11
}
и после десериализации
{
"score": 100,
"count": 11,
"total": 9
}
Итак, я хочу вычислить total
и отобразить его в десериализованном формате json. В случае Json.format[ClassRating]
total
будет проигнорировано. Помогите мне, пожалуйста, решить эту проблему
Комментарии:
1. Что вы уже пробовали сами?
Ответ №1:
Я уже решил эту проблему
case class Rating(score: Long = 0L, count: Int = 0) {
def total: Long = if (count == 0) 0L else score / count
}
object Rating {
def apply(score: Long, count: Int): Rating = new Rating(score, count)
def unapply(x : Rating): Option[(Long, Int, Long)] = Some(x.score, x.count, x.total)
}
val classRatingReads: Reads[Rating] = (
(JsPath "score").read[Long] and
(JsPath "count").read[Int]
)(Rating.apply _)
val classRatingWrites: OWrites[Rating] = (
(JsPath "score").write[Long] and
(JsPath "count").write[Int] and
(JsPath "total").write[Long]
)(unlift(ClassRating.unapply))