我在使用play framework 2.2.2中的Actor检查JsValue对象。当我尝试使用validate方法时,我收到了异常而不是结果对象:
try {
val result = data.validate[EventConfig]
Logger.debug("Result: "+result")
} catch {
case e =>
Logger.error("Exception: "+e)
}
以下是此异常信息:
Exception: play.api.libs.json.JsResultException: JsResultException(errors:List((,List(ValidationError(error.expected.jsnumber,WrappedArray())))))
为什么会发生这种情况,我应该如何使用验证方法?
====== 更新
我正在使用以下Reads实现:
implicit val EventConfig_reads = new Reads[EventConfig] {
def reads(json: JsValue): JsResult[EventConfig] = {
JsSuccess(new
EventConfig((json \ ConfigEventAttrs.PARAM).as[Int],
(json \ ConfigEventAttrs.PERIOD).as[Int],
(json \ ConfigEventAttrs.THRESHOLD).as[Int],
(json \ ConfigEventAttrs.TOGGLE).as[Boolean]))
}
}
解决方案是添加catch子句:
implicit val EventConfig_reads = new Reads[EventConfig] {
def reads(json: JsValue): JsResult[EventConfig] = {
try {
JsSuccess(new
EventConfig((json \ ConfigEventAttrs.PARAM).as[Int],
(json \ ConfigEventAttrs.PERIOD).as[Int],
(json \ ConfigEventAttrs.THRESHOLD).as[Int],
(json \ ConfigEventAttrs.TOGGLE).as[Boolean]))
} catch {
case e: JsResultException =>
JsError(e.errors)
}
}
}
time
,我将转换后的时间以秒为单位传递给毫秒:DateUtils.timeSecToDate((json \ ConfigEventAttrs.TIME).as[Long])
。 - Michał Jurczukapply
的函数来解决,正如我在我的编辑中所解释的那样,这对于评论来说有点过于复杂。 - Michael Zajac