scala – 如何在Lift中反序列化DateTime
我无法将来自
JSON的org.joda.time.DateTime字段反序列化为案例类.
JSON: 我还设置了这些序列化选项: 和反序列化: 帖子是: 我得到的例外是: net.liftweb.json.MappingException: No usable value for creationDate Invalid date format 2013-01-02T10:48:41.000-05:00 如何将该日期字符串反序列化为DateTime对象? 编辑: 解决方法
似乎是Lift默认使用的DateParser格式.在深入研究
the code时,您可以看到解析器在将结果传递给org.joda.time.DateTime的构造函数之前尝试使用DateParser.parse(s,format).
object DateParser { def parse(s: String,format: Formats) = format.dateFormat.parse(s).map(_.getTime).getOrElse(throw new MappingException("Invalid date format " + s)) } case object DateTimeSerializer extends CustomSerializer[DateTime](format => ( { case JString(s) => new DateTime(DateParser.parse(s,format)) case JNull => null },{ case d: DateTime => JString(format.dateFormat.format(d.toDate)) } )) Lift似乎使用的格式是:yyyy-MM-dd’T’HH:mm:ss.SSS’Z’ 要解决这个问题,您可以指定正确的模式并将其添加到序列化选项中,或者如果您希望让JodaTime构造函数完成所有工作,您可以创建自己的序列化程序,如: case object MyDateTimeSerializer extends CustomSerializer[DateTime](format => ( { case JString(s) => tryo(new DateTime(s)).openOr(throw new MappingException("Invalid date format " + s)) case JNull => null },{ case d: DateTime => JString(format.dateFormat.format(d.toDate)) } )) 然后将其添加到您的格式列表中,而不是net.liftweb.json.ext.JodaTimeSerializers.all (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |