我在我的一个新项目中使用 mongo-scala 组合,它需要反序列化带有日期字段的 mongo 文档
mongo 文档示例
{
"_id" : ObjectId("56603577616e082f559da3d9"),
"type" : "rule",
"startTime" : ISODate("2004-09-04T17:05:22.000Z"),
"finishTime" : ISODate("2005-09-04T18:06:22.000Z"),
"status" : "success"
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 mongo-scala-driver 来查询集合,并document.toJson()给我 json 字符串作为
{
"_id" : { "$oid" : "56603577616e082f559da3d9" },
"type" : "rule",
"startTime" : { "$date" : 1094317522000 },
"finishTime" : { "$date" : 1125857182000 },
"status" : "success"
}
Run Code Online (Sandbox Code Playgroud)
我需要将此 json 字符串反序列化为我的 Scala 案例类
case class Joblog (
_id : ObjectId,
type : String,
startTime: java.util.Date,
finishTime: java.util.Date,
status:String …Run Code Online (Sandbox Code Playgroud) scala mongodb mongo-scala-driver json4s jackson-module-scala
这就是我得到的:
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModuleobject
AppStart extends App {
val mapper = new ObjectMapper()
mapper.registerModule(DefaultScalaModule)
val json = """{"id":"AB","stuff":"whatever"}"""
val obj = mapper.readValue(json, classOf[TestClass])
println(obj.id.get) // prints AB !!!
}
case class TestClass(id: Option[Int] = None, stuff: Option[String] = None)
Run Code Online (Sandbox Code Playgroud)
同时,这甚至不会建立:
val bad: Option[Int] = "AB"
Run Code Online (Sandbox Code Playgroud)
显然这里有问题。我在项目中使用的版本:
scalaVersion:=“ 2.11.6”
libraryDependencies + =“ com.fasterxml.jackson.module”%“ jackson-module-scala_2.11”%“ 2.7.3”
在此链接
我试图理解为什么如果没有它,我为什么(可能)需要@JsonTypeName子类(像所有的'internet; sujests一样)?
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "aType")
@JsonSubTypes(Array(
new Type(value = classOf[ModelA], name = "ModelA"),
new Type(value = classOf[ModelB], name = "ModelB")
))
class BaseModel(val modelName:String)
//@JsonTypeName("SomeModel") // Commented. Do I need this?
class ModelA(val a:String, val b:String, val c:String, commonData:String) extends BaseModel(commonData) {
def this() = this("default", "default", "default" ,"default")
}
//@JsonTypeName("SomeModel") // Commented. Do I need this?
class ModelB(val a:String, val b:String, val c:String, commonData:String) extends BaseModel(commonData) …Run Code Online (Sandbox Code Playgroud) 我是scala的新手并试图将我的json映射到一个对象.我找到了jackson-scala-module但无法弄清楚如何使用它.一个小例子可能会有所帮助.
val json = { "_id" : "jzcyluvhqilqrocq" , "DP-Name" : "Sumit Agarwal" , "DP-Age" : "15" , "DP-height" : "115" , "DP-weight" : "68"}
Run Code Online (Sandbox Code Playgroud)
我想把它映射到 Person(name: String, age: Int, height: Int, weight: Int)
直到现在我一直在尝试使用它:
import com.fasterxml.jackson.databind.ObjectMapper
Val mapper = = new ObjectMapper();
val data = mapper.readValue(json, classOf[Person])
Run Code Online (Sandbox Code Playgroud)
我正在使用的依赖:
"com.fasterxml.jackson.module" % "jackson-module-scala_2.11" % "2.8.4"
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?
编辑:
[error] (run-main-4) com.fasterxml.jackson.databind.JsonMappingException: Can not construct instance of models.Person: no suitable constructor found, can not deserialize from Object value (missing default constructor or creator, …Run Code Online (Sandbox Code Playgroud)