【问题标题】:error from slick in play scalascala中光滑的错误
【发布时间】:2015-08-05 08:09:47
【问题描述】:

我玩弄 scala,玩得又滑又滑。 我想知道如何从 slick in play 中捕获错误。

可以说,有一个 DAO:

trait UserDao extends DAOSlick with UserComponent with HasDatabaseConfig[JdbcProfile] {
  import driver.api._

  def getUserWithId(id: UUID) = {
    db.run(userTable.filter { x => x.userId === id }.result.head)
  }
}

这个 trait 在我的控制器中使用:

class UserController extends Controller with UserDao {
  import driver.api._

   def getUser(id: String) = Action.async { implicit request =>
    getUserWithId(UUID.fromString(id)).map {
      res => Ok(Json.toJson(res))
    }
  }
}

如果没有给定 ID 的用户,slick 会报错:

[NoSuchElementException: Invoker.first]

在我的客户端(浏览器)中,我收到状态 500(内部服务器错误)。 我没有找到示例,slick 和 play 应该如何与来自数据库或 slick 的错误消息一起工作。

所有 DAO 的返回类型都应该是 Try[User] 吗? 在我看到的所有示例中,没有人关心失败的流畅调用。我错过了什么?

【问题讨论】:

    标签: scala playframework slick


    【解决方案1】:

    所有 DAO 的返回类型都应该是 Try[User] 吗?在我看到的所有示例中,没有人关心失败的流畅调用。我错过了什么?

    您缺少Option。更改您的 DAO 方法以返回 Option[User],而不是在 result 上调用 head 调用 headOption

    【讨论】:

    • 好的,这可能是一个选项。但是,我仍然不知道确切的错误。也许我想将不同的状态码返回给我的客户。例如:如果我插入一个“现有用户”,我想让我的客户知道是否存在重复键错误(由我的数据库引发)。
    • 无论如何,这回答了我上面的问题。谢谢!
    • Maybe I want to give different status codes back to my client. 正确,返回notFound 响应。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多