scala - 如何在Scala中迭代Future List的结果?
问题描述
我是 Scala 的新手,正在尝试使用akka
. 我正在尝试从 Scala 中的 MongoDB 访问数据,并希望将其转换为 JSON 和 XML 格式。下面附加的代码是使用路径/getJson并调用 getJson() 函数来获取未来形式的数据。
get {
concat(
path("getJson"){
val f = Patterns.ask(actor1,getJson(),10.seconds)
val res = Await.result(f,10.seconds)
val result = res.toString
complete(res.toString)
}
}
getJson() 方法如下:
def getJson()= {
val future = collection.find().toFuture()
future
}
我在文件中有一个 Greeting Case 类Greeting.scala
:
case class Greeting(msg:String,name:String)
和 MyJsonProtocol.scala 文件,用于将 scala 对象编入 JSON 格式,如下所示:
trait MyJsonProtocol extends SprayJsonSupport with DefaultJsonProtocol {
implicit val templateFormat = jsonFormat2(Greeting)
}
我complete(res.toString)
在 Postman 中得到的输出为:
Future(Success(List(
Iterable(
(_id,BsonObjectId{value=5fc73944986ced2b9c2527c4}),
(msg,BsonString{value='Hiiiiii'}),
(name,BsonString{value='Ruchirrrr'})
),
Iterable(
(_id,BsonObjectId{value=5fc73c35050ec6430ec4b211}),
(msg,BsonString{value='Holaaa Amigo'}),
(name,BsonString{value='Pablo'})),
Iterable(
(_id,BsonObjectId{value=5fc8c224e529b228916da59d}),
(msg,BsonString{value='Demo'}),
(name,BsonString{value='RuchirD'}))
)))
有人可以告诉我如何迭代这个输出并以 JSON 格式显示它吗?
解决方案
首先,不要打电话toString
。complete(res.toString)
正如AkkaHTTP json support guide中所说,如果您设置正确,您的案例类将自动转换为 json。
但正如我在输出中看到的,你res
不是一个Greeting
类型的对象。看起来它与 有某种关系,Greeting
并且具有相同的结构。似乎是 MongoDB 请求的原始输出。如果这是一个正确的假设,您应该将 MongoDB 的原始输出转换为您的Greeting
案例类。我想它可以在getJson()
after完成collection.find()
。
推荐阅读
- windows-10 - 在 Spring Tool Suite 4 for Windows 中安装 Lombok
- jquery - onsubmit 确认返回 false 时如何防止表单操作?
- python - Python 正则表达式转义运算符 \ 在替换和原始字符串中
- c++ - 我可以简化这个 std::list 的数量吗?
- python - 获得k-倒数最近邻
- python - 在 PonyORM 中找不到反向属性
- javascript - 如何使用 chat.postmessage 作为工作区用户发布松弛消息?
- asp.net - 根据某些条件更改网格视图值
- javascript - React native 不能通过命令在 ios 中运行,但可以在 Xcode 中运行?
- javascript - 在 Angular 组件类中调用自定义 jQuery 函数