我在Play framework 2.3中使用了websockets。
从the official how-to page引用此代码段。
import play.api.mvc._
import play.api.Play.current
def socket = WebSocket.acceptWithActor[InEvent, OutEvent] { request => out =>
MyWebSocketActor.props(out)
}
如何捕获JSON解析错误(RuntimeException:解析JSON时出错)?
这个问题与下面链接的问题非常相似,但是,我使用的是自定义类型(InEvent,OutEvent),而不是JsValue类型。我不想转换为JsValue或字符串。如果成功,我需要它转换为InEvent类型,或者抛出更具描述性的错误。
答案 0 :(得分:2)
在您的范围内某处隐含了implicit val inEventFrameFormatter = FrameFormatter.jsonFrame[InEvent]
implicit val outEventFrameFormatter = FrameFormatter.jsonFrame[OutEvent]
和customJsonFrame
的定义:
def customJsonFrame[A: Format]: FrameFormatter[A] =
FrameFormatter.jsonFrame.transform[A](
out => Json.toJson(out),
in => Json.fromJson[A](in).fold(
error => throw new CustomException(),
a => a
)
)
您只需要重写它们,而不是使用预定义的jsonFrame
自定义方法,例如implicit val inEventFrameFormatter = customJsonFrame[InEvent]
implicit val outEventFrameFormatter = customJsonFrame[OutEvent]
:
<
并用以下内容替换上述行:
>