gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:24:34 25 4
gpt4 key购买 nike

我将 websockets 与 playframework 2.3 一起使用。

这是来自 official how-to page 的片段.

def socket = WebSocket.acceptWithActor[JsValue, JsValue] { request => out =>
MyWebSocketActor.props(out)
}

当我使用代码时,如何捕获 json 解析错误(RuntimeException: Error parsing 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 消息,并根据您的意愿对其进行响应。

关于json - 使用 acceptWithActor 时如何捕获 json 解析错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26006968/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com