【发布时间】:2015-09-06 23:27:01
【问题描述】:
我正在使用 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)处理,但不确定如何在路由代码中使用它。
在此先感谢,我知道这对你们中的许多人来说相当简单:)
【问题讨论】:
-
类型不匹配,预期:ToResponseMarshallable,实际单位;但是我确信代码块是不完整的。我需要做什么才能将响应转换为 JSON 并成功完成请求 - 因为我不确定 list.toJason() 是否可以工作。