Scala Akka Http - 使用路由将 Future [A] 作为 Json 返回

标签 scala future akka-http

  • Akka Http 版本:"com.typesafe.akka"%% "akka-http"% "10.0.11"
  • 流版本:"com.typesafe.akka"%% "akka-stream"% "2.5.7"
  • 播放 Json 版本:"com.typesafe.play"%% "play-json"% "2.6.7"

我在 crudService 中有以下方法:

def getAll: Future[Seq[A]]

我想以 Json 的形式向世界提供结果的路线返回它。我目前有这个:

val crudService = new CrudService[Todo]()



val route =
    pathPrefix("todo" / "_all") {
      get {
        complete {
          crudService.getAll
        }
      }
    }



val bindingFuture = Http().bindAndHandle(route, hostname, port)

我也试过这个(首先完成 Future):

val route =
    pathPrefix("todo" / "_all") {
      get {
        onSuccess(crudService.getAll) { x =>
          complete x
        }
      }
    }

它一直在说:不适用于 ToResponseMarshallable。我找不到导致正确解决方案的文档,我也不完全理解这里的问题。有人可以帮忙吗?

最佳答案

您需要添加非内置的 play json 支持以提供(取消)编码支持。

尝试导入https://github.com/hseeberger/akka-http-json库并将您的类(class)与 PlayJsonSupport 混合。您可以查看示例应用程序 here .

def route(implicit mat: Materializer) = {
  import Directives._
  import PlayJsonSupport._

  pathSingleSlash {
    post {
      entity(as[Foo]) { foo =>
        complete {
          foo
        }
      }
    }
  }
}

Http().bindAndHandle(route, "127.0.0.1", 8000)

关于Scala Akka Http - 使用路由将 Future [A] 作为 Json 返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47758912/

相关文章:

scala - 在 Scala 中解压并读取 gzip 文件

scala - 为什么这个带有类型投影的循环引用是非法的?

scala - 如何禁用 java ortools CP 求解器日志记录?

multithreading - 我如何使用 boost thread futures 的向量?

http - 访问当前连接的 Akka HTTP 客户端证书

scala - Scala 有没有通用的内存方法?

android - flutter 错误 : The getter 'iterator' was called on null

rust - 从 channel 读取并使用 poll_fn 和 try_ready 的 Tokio future 永远不会完成

scala - 如何将 Bytestring 转换为 Source[Bytestring, Any]

scala - akka http、字符集 header 、utf-8 问题