1

我正在使用 akka-http 构建一个简单的 RESTful 微服务,该微服务将数据存储在 cassandra 中。我有 cassandra 部分工作,大部分服务部分除了无法弄清楚路由部分。我理解这个概念,但停留在细节上。这是我无法编译的服务代码。

val routes = {

  pathPrefix("users") {

    get {
      // GET /users
      path(Rest) {
        // Push handling to another context to avoid blocking
        complete {
          val f: Future[List[Users]] = service.getAllUsers()

          f onComplete  {
            case Success(list: List[Users]) => {
              list.toJson()
            }
          f onFailure() => {

            }
          }
        }
      }
    } ~
      // GET /users/{email}
    path(Rest) { email: String =>
      val found: Future[Option[Users]] = service.getByUsersEmail(email)

      complete {
        found onComplete {
          case Success(user: Users) => {
            user.toJson()
          }
        }
      }
    }

UsersService 是 cassandra 的数据服务,所有方法都返回期货。我确实希望所有响应都是 JSON,我认为可以使用喷雾(implicit val jsonFormatUsers = jsonFormat5(Users) 或我拥有的自定义 PersonJsonProtocol)来处理它,但不确定如何在路由代码中使用它。

在此先感谢,我知道这对你们中的许多人来说相当简单:)

4

1 回答 1

0

您实际上并没有在您的完整指令中返回用户列表,而是返回 Unit。Future 的 onComplete 方法返回 Unit。您说您在范围内定义了 json 格式化程序,我猜您已经在 SprayJsonProtocol 中混合,并且您在范围内有隐式执行上下文。如果是,那么你可以写

complete {
    service.getAllUsers()
}

所有的魔法都会完成。

于 2015-09-07T00:46:06.817 回答