【问题标题】:Scala Akka Http - Use routes to return Future [A] as JsonScala Akka Http - 使用路由将 Future [A] 作为 Json 返回
【发布时间】:2018-05-25 07:54:19
【问题描述】:
  • 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。我找不到导致正确解决方案的文档,我也不完全理解这里的问题。有人可以帮忙吗?

【问题讨论】:

    标签: scala future akka-http


    【解决方案1】:

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

    尝试导入 https://github.com/hseeberger/akka-http-json 库并将您的类与 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)
    

    【讨论】:

    • 不幸的是,我没有运行它。添加到 sbt 后 PlayJsonSupport 不可用。
    猜你喜欢
    • 2013-01-24
    • 2012-12-19
    • 1970-01-01
    • 2020-06-05
    • 2015-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    相关资源
    最近更新 更多