标签: jackson-module-scala

将 mongo 文档的 DateField 反序列化为 java.util.Date

我在我的一个新项目中使用 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

5
推荐指数
0
解决办法
647
查看次数

我只是通过使用Jackson JSON反序列化来破坏JVM类型的安全性吗?

这就是我得到的:

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”

json jvm scala type-safety jackson-module-scala

5
推荐指数
1
解决办法
204
查看次数

杰克逊为什么我需要在子类上使用JsonTypeName批注

此链接

我试图理解为什么如果没有它,我为什么(可能)需要@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)

java json scala jackson jackson-module-scala

4
推荐指数
1
解决办法
9502
查看次数

使用Scala Jackson进行JSON反序列化?

我是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)

scala jackson jackson-module-scala

1
推荐指数
1
解决办法
2596
查看次数