在Scala/Play中解析JSON日期时间

7
我有以下定义的Read:

我有以下定义的Read:

import org.joda.time.DateTime;

implicit val userInfoRead: Reads[UserInfo] = (
  (JsPath \ "userName").readNullable[String] and
] (JsPath \ "startDate").readNullable[DateTime]
 (UserInfo.apply _)

传入以下JSON对象:

  "userInfo" : {
    "userName": "joeuser",
    "startDate": "2006-02-28"
  }

当我验证这些数据时,我会得到以下错误提示:
(/startDate,List(ValidationError(validate.error.expected.jodadate.format,WrappedArray(yyyy-MM-dd))))))

你对格式中缺少了什么有什么建议吗?


你的第一段代码的第5行有一个免费的],那个应该在那里吗? - Electric Coffee
不好意思,那是一个复制/粘贴的错误。 - ccudmore
这是示例代码中的复制/粘贴错误,而不是程序代码中的错误。 - ccudmore
1个回答

4
据我所见,问题可能只是格式不符合Joda所期望的。我稍微简化了一下,这对我有效:
scala> import org.joda.time.DateTime
import org.joda.time.DateTime

scala> case class UserInfo(userName: String, startDate: DateTime)
defined class UserInfo

scala> implicit val dateReads = Reads.jodaDateReads("yyyy-MM-dd")
dateReads: play.api.libs.json.Reads[org.joda.time.DateTime] = play.api.libs.json.DefaultReads$$anon$10@22db02cb

scala> implicit val userInfoReads = Json.reads[UserInfo]
userInfoReads: play.api.libs.json.Reads[UserInfo] = play.api.libs.json.Reads$$anon$8@52bcbd5d

scala> val json = Json.parse("""{
     |     "userName": "joeuser",
     |     "startDate": "2006-02-28"
     |   }""")
json: play.api.libs.json.JsValue = {"userName":"joeuser","startDate":"2006-02-28"}

scala> json.validate[UserInfo]
res12: play.api.libs.json.JsResult[UserInfo] = JsSuccess(UserInfo(joeuser,2006-02-28T00:00:00.000-05:00),)

谢谢。我尝试了你的代码,但是得到了与我的代码一样的错误信息。不知道我使用的Scala版本是否有bug? - ccudmore
@user2639243 你使用的是哪个版本? - acjay
使用Scala 2.10.0,是Play 2.1.4的一部分。 - ccudmore
我明白了。那升级不是一个可行的选择吗? - acjay
无法升级,已经正确。 - ccudmore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接