我将 websockets 与 playframework 2.3 一起使用。
这是摘自官方操作方法页面.
def socket = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
MyWebSocketActor.props(out)
}
当我使用代码时,如何捕获 json 解析错误(RuntimeException:解析 JSON 时出错)?
使用内置的 json 帧格式化程序,你不能,这里是源代码:
https://github.com/playframework/playframework/blob/master/framework/src/play/src/main/scala/play/api/mvc/WebSocket.scala#L80
如果 Json.parse 抛出异常,它会将该异常抛出给 Netty,Netty 将向 Netty 异常处理程序发出警报,从而关闭 WebSocket。
你可以做的是定义你自己的 json 帧格式化程序来处理异常:
import play.api.mvc.WebSocket.FrameFormatter
implicit val myJsonFrame: FrameFormatter[JsValue] = implicitly[FrameFormatter[String]].transform(Json.stringify, { text =>
try {
Json.parse(text)
} catch {
case NonFatal(e) => Json.obj("error" -> e.getMessage)
}
})
def socket = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
MyWebSocketActor.props(out)
}
然后,在您的 WebSocket actor 中,您可以检查具有错误字段的 json 消息,并根据您的意愿响应它们。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)