在将acceptWithActor与自定义类型一起使用时,如何捕获JSON解析错误?

时间:2017-09-08 00:00:09

标签: json scala websocket playframework-2.3

我在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类型,或者抛出更具描述性的错误。

How do I catch json parse error when using acceptWithActor?

1 个答案:

答案 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]

<

并用以下内容替换上述行:

>