我正在使用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,我认为可以使用spray(隐式val jsonFormatUsers = jsonFormat5(用户)或我自己的自定义PersonJsonProtocol)来处理,但不确定如何在路由代码中使用它。
在此先感谢,我知道这对你们很多人来说相当简单:)
答案 0 :(得分:0)
您实际上并未返回完整指令中的用户列表,而是返回单元。 Future的方法onComplete返回Unit。你说你在范围内定义了json格式化程序,我猜你已经混合了SprayJsonProtocol,并且你在范围内也有执行上下文。如果是,那么你可以写
complete {
service.getAllUsers()
}
所有魔法都将完成。