scala - 如何捕获任何 scalatra 操作中的所有错误?

标签 scala scalatra

我正在使用 scalatra 将 MongoDB 数据“导出”到 JSon,我的操作非常简单,例如:

   get("/") {
      val title = db.get_collection("main", "api", "title")
      send_json(title)
    }

如果出现问题,我想发送 HTTP 错误和文本,另一方面,它将被转换为对用户有意义的内容。
所以方法变成了:
   get("/") {
     try {
      val title = db.get_collection("main", "api", "title")
      send_json(title)
     } catch {
      case e:java.util.NoSuchElementException => send_error("DB malformed", InternalError)
      case e:com.mongodb.MongoException => send_error("Can not connect to MongoDB", InternalError)
      case e => send_error("Internal Error", InternalError)
    }
  }

try catch 比实际方法大,我需要为每个方法都这样做,这个类乍一看变成了一个丑陋的 try catch 集合。
有什么方法可以避免或最小化代码中的难看和分散注意力的 try catch 吗?我是 Scala(和 Java BTW)的新手,所以我想我错过了一些东西。

我不希望 DB 对象发送 JSON,因此在 db.get_collection 方法上使用 try catch 不是一种选择。

最佳答案

有一个特殊的路由处理程序:

error {
  case e: Throwable => {
    redirect("/")
  }
}

通过更改 case语句,您可以打开错误类型。

关于scala - 如何捕获任何 scalatra 操作中的所有错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9481145/

相关文章:

java - Scalatra 独立部署时找不到 View

json - ObjectId 未序列化为 JSON

scala - 尝试使用 Scalatra 编译项目但失败

Scala:如何通过元组的第一个元素合并列表

scala - 如何正确终止包含循环的图?

scala - Dataproc 返回 StatusRuntimeException 找不到集群

java - 使用 Java/Scala 解析与硬件的 ASCII 通信?

jetty - 将 Scalatra 部署到 Jetty

Scala - 获取给定年份的所有月份和日期

scala - 可分发的zip Web服务器