我有一个案例类别 Ab。
case class Ab(
startTime: java.sql.Timestamp)
我得到了这个的 JSON 表示。
{"startTime":"2014-12-12 11:12:12"}
Json4s 显然不支持时间戳,所以我创建了一个自定义序列化器,例如:
case object TimestampSerializer extends CustomSerializer[Timestamp](format => (
{
case JString(s) => {
Timestamp.valueOf(s)
}
case JNull => null
},
{
case tm: Timestamp => JString(tm.toString())
}))
但是,当我尝试提取值时,出现映射异常。
我的代码
org.json4s.jackson.JsonMethods.parse(""" {"startTime":"2014-12-12 11:12:12"} """).toString
//JObject(List((startTime,JString(2014-12-12 11:12:12))))
org.json4s.jackson.JsonMethods.parse(""" {"startTime":"2014-12-12 11:12:12"} """).extract[Ab]
//MappingException: No usable value for startTime
//Invalid date '2014-12-12 11:12:12'
像这样编写序列化器是有效的:
case object TimestampSerializer extends CustomSerializer[Timestamp](format => (
{
case JInt(s) => {
new Timestamp(s)
}
case JNull => null
},
{
case tm: Timestamp => JString(tm.toString())
}))
最佳答案
只需覆盖默认的日期格式化程序。它对我有用。
case class Test(startTime: Timestamp)
implicit val formats = new DefaultFormats {
override def dateFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
}
val t1 = parse("""{"startTime":"2014-12-12 11:12:12"}""").extract[Test]
关于Json4s:转换为 java.sql.Timestamp 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27408180/