[英]Scala deserialization of custom scala object with play-json library
嘗試將JSON字符串解析為自定義Scala對象時,我的ScalaTest中斷了。 我正在使用Play-Json庫進行[反序列化]。 序列化工作正常,但是在Blah類上運行單元測試時,反序列化會中斷。 該測試使用ScalaTest庫調用fromJsonString()方法和Im進行單元測試。 在這里感謝一些幫助。
異常跟蹤:(完整跟蹤-http : //pasted.co/e627b1ee )
An exception or error caused a run to abort: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object;
java.lang.NoSuchMethodError: scala.collection.immutable.$colon$colon.hd$1()Ljava/lang/Object;
at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:144)
at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:108)
at play.api.libs.json.jackson.JsValueDeserializer.deserialize(JacksonJson.scala:103)
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:3536)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:1872)
at play.api.libs.json.jackson.JacksonJson$.parseJsValue(JacksonJson.scala:226)
at play.api.libs.json.Json$.parse(Json.scala:21)
at com.project.gateway.model.Blah.fromJsonString(Blah.scala:98)
Scala對象定義:
case class Blah(name: String, id: String) {
implicit val BlahWrites: Writes[Blah] = (
(JsPath \ "name").write[String] and
(JsPath \ "id").write[String]
)(unlift(Blah.unapply))
implicit val BlahReads: Reads[Blah] = (
(JsPath \ "name").read[String] and
(JsPath \ "id").read[String]
)(Blah)
def toJsonString(): String = {
Json.toJson(this).toString()
}
def fromJsonString(jsonString: String): Blah = {
val value = Json.parse(jsonString)
value.as[Blah]
//Json.fromJson[Blah](value).get
}
}
我的SBT文件:
name := "Project"
version := "1.0"
scalaVersion := "2.11.7"
libraryDependencies += "com.typesafe.scala-logging" % "scala-logging_2.11" % "3.1.0"
libraryDependencies += "org.scalatest" % "scalatest_2.11" % "2.2.4" % "test"
libraryDependencies += "com.typesafe.play" % "play-json_2.10" % "2.4.2"
我猜在運行時/測試時,scala庫的版本與用於建立依賴關系的版本之間存在差異,這會引發錯誤。
如果使用SBT或Maven,則可以檢查已使用的庫(包括可傳遞庫),因此請檢查scala庫是否存在不兼容性(以不同的依賴關系拉入不同版本)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.