我在playframework 2.3中使用了websockets。
这是官方指南页面的摘录。
def socket = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
MyWebSocketActor.props(out)
}
当我使用代码时,如何捕获json解析错误(RuntimeException:解析JSON错误)?
您不能使用内置的json帧格式化程序,这是源代码:
如果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消息,并根据您的意愿对其进行响应。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句