我正在尝试使用 Akka HTTP Server 和 Scala 编程语言创建 Post 请求路径。
当我成功发出并接收 post 请求数据后,我想访问参数country
内字段的值device
。
访问此参数的最佳方法是什么?
我正在使用 SprayJSON 作为编组器。
当前代码出现错误Found: Option[Option[String]] Required: String
。
再次,请求已成功处理,我只是不知道如何访问参数country
内字段的值device
。
代码如下。
案例类别:
case class Geo(country: Option[String])
case class Device(id: String, geo: Option[Geo])
case class dataRequest(id: String, device: Option[Device])
Post请求路径:
Path(“submit”) {
Post {
Entity(as[dataRequest]) { data_request_params =>
data_request_params.device.map(dev => dev.geo.map(geo => {
val geoDevice = geo.country
}))
}
}
}
请求主体:
{
“id”: “fghq1I123”,
“device”: {
“id”: “0004a672f”,
“geo”: {
“Country”: “AU”
}
}
}
根据您在上一篇文章中提出的问题,您遇到的问题似乎与akka或akka-http无关。 它与scala 的类型系统有关。
首先你需要了解
Option
课程是如何运作的,同时了解map
和之间的区别是什么flatMap
。map
方法具有签名Option[A].map[B](A => B): Option[B]
。这意味着,它将把 中包含的值Option
(如果 Option 的类型为Some
,否则它将不执行任何操作)从转换A
为B
。例如:flatMap
方法具有签名Option[A].flatMap[B](A => Option[B]): Option[B]
。如您所见,预期的函数是Option[B]
,返回类型是Option[B]
。这就是您在这种特定情况下需要的魔法。修复代码中的错误
这里有一个不错的链接,可以了解更多信息
Option
同时我建议先学习Scala的基础知识。