Json4s:转换为 java.sql.Timestamp 不起作用

标签 json scala playframework-2.0 json4s

我有一个案例类别 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/

相关文章:

playframework-2.0 - 玩框架 2 双重身份验证?

playframework-2.0 - Play 2 将系统属性传递给测试用例

json - 如何检查 JSON 是否包含在 golang 中的数组 JSON 对象中

javascript - JStree:如何将 AJAX 加载的根节点的状态设置为未确定

python - 展平或解压 DataFrame 中嵌套字典的列表

scala - 奇怪的模式匹配语法

Scala:默默地捕捉所有异常

scala - "r0"、 "r1"等在 Scala 中有特殊含义吗?

java - Java中的simpleJson解析

java - 如何将自定义数据附加到 ebean 实体?