Play框架中的异常处理

2023-12-24

我正在使用 play 框架 (2.3.x) 来构建一个宁静的 API。

今天,我在 API 控制器中的所有 api 函数周围有一个 try/catch 块,以便能够捕获异常并返回通用的“错误 json”对象。

Example:

def someApiFuntion() = Action { implicit request =>
    try {
        // Do some magic
        Ok(magicResult)
    } catch {
        case e: Exception =>
            InternalServerError(Json.obj("code" -> INTERNAL_ERROR, "message" -> "Server error"))
    }
}

我的问题是:是否有必要在每个 api 函数中都有一个 try/catch 东西,或者是否有更好/更通用的方法来解决这个问题?


@Mikesname 链接是解决您问题的最佳选择,另一种解决方案是使用动作组合 https://www.playframework.com/documentation/2.0/ScalaActionsComposition并创建您的操作(如果您想对操作有更高的控制权):

def APIAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
  Action { request =>
    try { f(request) } 
    catch { case _ => InternalServerError(...) }
  }
}

def index = APIAction { request =>
  ...
}

或者使用更惯用的 ScalaTry:

def APIAction(f: Request[AnyContent] => Result): Action[AnyContent] = {
  Action { request =>
    Try(f(request))
      .getOrElse(
        InternalServerError(Json.obj("code" -> "500", "message" -> "Server error"))
      )
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Play框架中的异常处理 的相关文章

随机推荐

  • 出现错误 操作“=”的排序规则 (utf8mb4_unicode_ci,IMPLICIT) 和 (utf8mb4_general_ci,IMPLICIT) 的非法混合

    当尝试通过 MySQL 中的存储过程进行选择时 出现以下错误 操作 时非法混合排序规则 utf8mb4 unicode ci IMPLICIT 和 utf8mb4 general ci IMPLICIT SHOW VARIABLES WHE
  • 为什么 ConcurrentDictionary.TryRemove 需要第二个参数?

    我只想删除一个值 之后我不需要使用该变量 为什么不包含不需要第二个参数的重载 我是否真的必须将其存储在临时局部变量中 而不使用它 并让垃圾收集器在方法结束时收集它 看起来比较傻 功能 http msdn microsoft com en u
  • 不使用 UIImagePickerController 获取 UIImage 元数据

    如何在不使用 UIImagePickerController 的情况下获取 UIImage 元数据 我基本上有一个变量 UIImage 我想获取元数据 例如 我需要类似 myImage date 的内容来访问日期 编辑1 我尝试这个但它崩溃
  • 如何在 StackNavigator 中卸载模糊的屏幕?

    我在用着反应导航 x5 我有StackNavigator那正在加载一堆屏幕 我想在模糊时卸载一个特定的屏幕组件以获得与使用相同的结果unmountOnBlur当使用一个DrawerNavigator 我怎样才能做到这一点 目前有三种方法可以
  • ImageMagick 扩展具有透明背景的画布

    convert input png extent 100x100 gravity center background white output png 如果输入为 50x50 则周围背景为白色 我可以以某种方式将其设置为透明而不将输入中的任
  • javascript - 仅从 document.referrer 获取域

    我只想从引用网址中获取域名 我最常得到的引荐网址是http www davidj com pages flyer asp http www ronniej com linkdes com adv 267 loc 897 每当我得到像上面这样
  • 远程服务器身份验证从 R 脚本读取 Googlesheets 不使用服务帐户?

    我正在 R 中自动化一个流程 以某种方式提取 推送 分析和存储数据 总而言之 在 Googlesheets Postgresql 和 salesforce 之间处理数据 到目前为止 我已经在我的系统中运行了它 但我需要从 aws 上的远程登
  • 如何从 Java 1.4.2 更改文件权限?

    我正在寻找一个代码片段 我必须使用它来更改unix上的文件权限 我的项目在 java 1 4 2 上运行 只需一个示例代码示例或需要使用的方法即可 问候 森尼 你并不是唯一的一个 如何在Java中更改文件的权限和最后修改时间 https s
  • 通过平分(搜索)修订历史记录和不可测试的提交(修订)来查找错误

    大多数现代版本控制工具都有一个命令 可以通过对历史记录进行二分搜索 平分 来查找引入错误的更改 此类命令可能是内置的 也可能作为扩展或插件提供 例子包括git 二等分 http www kernel org pub software scm
  • sqlite3_exec是否存在内存泄漏?

    我正在使用 SQLite 来存储我的数据 我正在编写包装类 我想知道 如果 res SQLITE OK 和 errorMsg 将显示到屏幕上 是否会发生内存泄漏 那么我需要做 free errorMsg 吗 在 if 语句中 谢谢 int
  • 如何告诉 lcov 在哪里可以找到我的 .cpp 和 .h 文件?

    我的源代码和构建树如下所示 请参阅Makefile 将不同目录中的源文件中的目标文件放入单个单独的目录中 https stackoverflow com questions 4102469 makefile to put object fi
  • 在AngularJS中添加/删除多个li的类

    我的清单如下 ul li one li li two li li three li ul 现在 当一个特定的li被点击 我想要active要添加到相同的类并删除active与其他班级相比li元素 另外 当同样li再次点击我想删除active
  • 服务器崩溃后 MongoDB 将无法启动

    我的 Ubuntu 计算机崩溃了 当我重新启动它时 MongoDB 无法工作 我尝试了以下命令 并得到以下输出 mongo Error couldn t connect to server 127 0 0 1 27017 src mongo
  • 识别联合多边形的原始边

    我有很多多边形 在将所有这些多边形合并后 我得到一个新的大多边形 联合算法是一个黑匣子 使用第三方库过程 我无法控制 我也不希望从进度中提取任何信息 有没有有效的方法让我知道 对于那个巨大的联合多边形的每条边 其中哪一条属于较小多边形的哪条
  • 为什么我得到的是 AggregationCursor 结果而不是平均值?

    我正在查询 MongoDB 数据库 但不明白为什么当我期望返回单个数字时却得到聚合器游标 也许我需要从光标对象中获取一些东西 只是想不明白是什么 module exports CalculateAvg async collection gt
  • Ruby require 'tk' 产生 LoadError: no such file to load -- tk

    我无法让红宝石需要 tk 成功地 我正在使用 rvm ruby 2 0 0 ActiveTcl 8 6 和 Ubuntu 12 04 LTS 我跑了wish与 ActiveTcl 一起提供 它似乎可以工作 我查看了 RVM 网站http r
  • Xcache var_size 错误

    我正在尝试将 xcache 与 zend 框架结合使用来缓存 Zend Db Table Abstract 中的元数据 以便每个表仅调用一次描述查询 在我的引导程序中实现 xcache 并运行该应用程序时 出现以下错误 Warning xc
  • 没有发送过期标头,缓存内容,浏览器发出条件 GET 请求需要多长时间?

    假设浏览器默认设置 并且发送的内容没有过期标头 用户访问网站 浏览器缓存图像等 用户没有关闭浏览器或刷新页面 用户继续正常浏览网站 假设浏览器不会出于任何原因转储缓存 当用户浏览时 浏览器会缓存图像等 但尚不清楚何时会发出条件 GET 请求
  • Git:取消交互式变基

    我喜欢git rebase i HEAD 5压缩我的承诺 有时我认为我需要返回 5 次提交 但后来意识到我需要 7 次 然而 git 已经调出了 rebase 编辑器 git rebase merge git rebase todo在维姆中
  • Play框架中的异常处理

    我正在使用 play 框架 2 3 x 来构建一个宁静的 API 今天 我在 API 控制器中的所有 api 函数周围有一个 try catch 块 以便能够捕获异常并返回通用的 错误 json 对象 Example def someApi