如何在使用acceptWithActor时捕获json解析错误



我使用带有playframework 2.3的websocket。

这是官方操作页面的一个片段。

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消息,并根据您的意愿对其进行响应。

相关内容

  • 没有找到相关文章

最新更新