Я новичок в Scala, и мой вопрос о сериализации Json с использованием play (2.5) для необязательного значения Joda Мои входы: 1.
import org.joda.time.LocalDateTime
case class User(
name: String,
lastLogin: Option[LocalDateTime])
object User {
implicit val serializers = JsonSerializers
implicit val UserFormat: Format[User] = Format(serializers.UserReads, serializers.UserWrites)
}
Сериализаторы
import com.dtos.{User}
import org.joda.time.LocalDateTime
import org.joda.time.format.DateTimeFormat
import play.api.libs.json._
import play.api.libs.functional.syntax._
object JsonSerializers {
val dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS"
implicit val UserReads: Reads[User] = (
(JsPath \ "name").read [String] and
(JsPath \ "active").read [Boolean] and
(JsPath \\ "$ldt").read[LocalDateTime]
)(User.apply _)
implicit val UserWrites: Writes[User] = (
(JsPath \ "name").write [String] and
(JsPath \ "active").write [Boolean] and
(JsPath \ "lastLogin" \ "$ldt") .write [LocalDateTime]
)(unlift (User.unapply))
}
Тестовый объект:
object MainTest extends App {
val value: JsValue = Json.parse("{ \"name\" : \"hello\" , \"lastLogin\" : {\"$ldt\":\"2018-09-09T11:06:27.655\"} }")
println("First Output:")
println(Json.toJson(new MyUser("user", LocalDateTime.now)))
println("Second Output:")
println(Json.fromJson(value))
}
Вопросы: 1. Как управлять значением параметра во времяUserReads / UserWrites?Я получаю следующую ошибку:
перегруженное значение метода применяется с альтернативами: [B] (f: B => (String, Boolean, org.joda.time.LocalDateTime)) (неявный fu: play.api.libs.functional.ContravariantFunctor [play.api.libs.json.Reads]) play.api.libs.json.Reads [B] [B] (f: (строка, логическое значение, org.joda.time).LocalDateTime) => B) (неявный fu: play.api.libs.functional.Functor [play.api.libs.json.Reads]) play.api.libs.json.Reads [B] не может быть применен к ((String, Boolean, Option [org.joda.time.LocalDateTime]) => com.dtos.User) (JsPath \ "active"). Read [Boolean] и
не может заставить его работать на входе Json Structure of User, когда $ ldt является подэлементом lastLogin:
val value: JsValue = Json.parse("{ \"name\" : \"hello\" , \"lastLogin\" : {\"$ldt\":\"2018-09-09T11:06:27.655\"} }")
(means User is defined by:
"name\":\"myName\",
\"active\":true,
\"lastLogin\":{\"$ldt\":\"2018-09-09T11:06:27.655\"}
}
)