将 acceptWithActor 与自定义类型一起使用时,如何捕获 JSON 解析错误?
How do I catch a JSON parse error when using acceptWithActor with custom types?
我在 Play 框架 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?
在您的范围内某处有 FrameFormatter[InEvent]
和 FrameFormatter[OutEvent]
的隐式定义:
implicit val inEventFrameFormatter = FrameFormatter.jsonFrame[InEvent]
implicit val outEventFrameFormatter = FrameFormatter.jsonFrame[OutEvent]
你只需要重写它们,而不是使用预定义的 jsonFrame
自定义方法,如 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
)
)
并将上述行替换为:
implicit val inEventFrameFormatter = customJsonFrame[InEvent]
implicit val outEventFrameFormatter = customJsonFrame[OutEvent]
我在 Play 框架 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?
在您的范围内某处有 FrameFormatter[InEvent]
和 FrameFormatter[OutEvent]
的隐式定义:
implicit val inEventFrameFormatter = FrameFormatter.jsonFrame[InEvent]
implicit val outEventFrameFormatter = FrameFormatter.jsonFrame[OutEvent]
你只需要重写它们,而不是使用预定义的 jsonFrame
自定义方法,如 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
)
)
并将上述行替换为:
implicit val inEventFrameFormatter = customJsonFrame[InEvent]
implicit val outEventFrameFormatter = customJsonFrame[OutEvent]