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

2023-12-03

我将 websockets 与 playframework 2.3 一起使用。

这是摘自官方操作方法页面.

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 消息,并根据您的意愿响应它们。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用acceptWithActor时如何捕获json解析错误? 的相关文章

随机推荐

  • 在 Spring Boot 中使用可执行 jar 命令时出现资源 FileNotFoundException

    启用https在我的 spring boot 应用程序中 我执行了以下操作 Bean Inject public EmbeddedServletContainerCustomizer containerCustomizer throws F
  • 在Python中读取Fortran二进制文件

    我在用 Python 读取未格式化的 F77 二进制文件时遇到问题 我已经尝试过SciPy io FortraFile方法和NumPy fromfile方法 均无济于事 我还阅读了 IDL 中的文件 该文件有效 因此我对数据应该是什么样子有
  • 如何通过 Java 从 Outlook 发送电子邮件?

    我被困在公司防火墙后面 不允许我通过 Java Mail API 或 Apache Commons Email 等传统方式发送电子邮件 甚至无法发送给组织内部的其他人 无论如何 这就是我想要的 但我的 Outlook 2010 显然可以发送
  • 即使 12 小时后,加载 csv 的查询也未完成

    我已经使用 Neo4j 有一段时间了 我在 7 天前的计算机崩溃之前运行了此查询 但不知何故现在无法运行它 我需要根据银行交易的 csv 创建一个图形数据库 原始数据集大约有 500 万行 大约 60 列 这是我使用的查询 从 从真实数据导
  • 没有指定第一个参数的可变参数函数?

    出于好奇 我想尝试编写一个模仿 C 的多委托模式的基本 C 类 下面的代码主要完成了这项工作 但代价是失去了几乎所有类型安全性 但必须使用初始虚拟参数来设置 va list 似乎确实有点不对劲 有没有办法在没有这个的情况下使用 va lis
  • 文件上传 Dropbox v2.0 API

    我正在使用新的 NET Dropbox SDK v2 我正在尝试将文档上传到 Dropbox 帐户 public async Task UploadDoc using var dbx new DropboxClient XXXXXXXXXX
  • 使用 Python 请求和 REST API 发布 WordPress 帖子

    我尝试通过以下代码使用 python 请求和 REST API 将帖子发布到 WordPress 博客 auth Basic str base64 b64encode b admin 123456 utf 8 headers Authori
  • 将 xml 转换为在文本周围包含 CDATA 的最佳方法(在 java 中)

    我有一个奇怪的要求 我需要获取一些 xml 并重新编写它 以便将文本节点包装在 CDATA 中 这是针对不允许正常转义的客户端 似乎任何普通的 XML 库 dom4j jdom java xml 都没有对此有任何内置支持 有任何想法吗 我可
  • 为什么我的替换中 $1 是空的?

    我试图将括号内的内容放入 img 标签中 src 属性的值中 while
  • 如何刷新与当前请求期间登录的用户不同的用户的声明?

    我使用以下代码来更新 Web 应用程序中用户的声明 但是 为了更新该用户的声明 cookie 我想强制他再次登录 所以本质上我想在更新声明后使他的 cookie 过期 知道如何做到这一点吗 await signInManager Refre
  • 创建Excel文件时如何保留日期格式?

    我有一个 xlsx 文件 将其导入到 Python 中并创建一个 Pandas 数据框 xlsx 文件中的一列格式为日期 年 月 日并像这样导入 然后 我从该数据框中删除一些不需要的列 并使用 xlsxwriter 引擎导出该数据框以创建另
  • 我想在点击后更改背景颜色?

    我想改变点击后的背景颜色 这是我的 HTML 代码 td class meun td 这是我的 JavaScript function getclick this style background color EFF2F7 http jsf
  • Mocha + React:导航器未定义

    我正在尝试为 React 组件编写第一个测试 但不断收到错误 ReferenceError navigator is not defined 我有一个组件 其中一个孩子使用代码镜像用于显示可编辑的文本区域 问题是 在 codemirror
  • 另一种解决方案代替 tableView.reloadData()

    我使用以下代码在 tableView 上调用批量更新 开始 结束更新 let oldImageSet Set oldImageArray let newImageSet Set self images let missingImages n
  • 画布上可绘制的图像

    如何将图像获取到画布以便在该图像上绘图 在画布上绘制 Drawable 的好方法不是自己对其进行解码 而是将其留给系统来完成 Drawable d getResources getDrawable R drawable foobar nul
  • ContentView 中的按钮会导致 MonoTouch 运行时崩溃。 Monotouch 4.0 中的错误?

    我的应用程序在 MT 3 0 中运行良好 现在当我升级了 当按钮位于 ContentView 中时 我看到错误 单击按钮时会发生崩溃 代码 public override UITableViewCell GetCell UITableVie
  • Redis过期不起作用

    我使用 ServiceStack Redis 从最新来源构建 https github com ServiceStack ServiceStack Redis tree master src 我做了这样的事情 CacheRecord fou
  • Flask+AJAX+Jquery+JINJA动态更新HTML Table

    我想动态显示端口状态 我不想重新加载页面来查看新值 我知道如何在Python中获取端口状态 使用uiApi 现在 我渲染一个包含该值的模板 并在 HTML 表中显示这些值 如何使用 Flask 中的值不断更新表 我有 AJAX 和 jque
  • C# 相当于 Java 标点正则表达式

    我正在寻找 C 中与此正则表达式等效的等效项 Java public static final String expression s p Punct Punct 是 Java 中的保留字符类 但我不确定如何创建等效表达式 以便 net 正
  • 使用acceptWithActor时如何捕获json解析错误?

    我将 websockets 与 playframework 2 3 一起使用 这是摘自官方操作方法页面 def socket WebSocket acceptWithActor JsValue JsValue request gt out