我正在尝试使用 Akka HTTP Server 和 Scala 编程语言创建 Post 请求路径。
但是我成功发出请求后,发现很难访问请求体参数的值。
我想要访问h
印象w
和domain
站点的参数值。
访问这些参数的最佳方法是什么?
我正在使用它SprayJSON
作为编组器。
当前代码val h =bid_request_params.imp.h
出现错误value h is not a member of Option[List[com.example.WebServer.Impression]]
。
再次,请求已成功处理,我只是不知道如何访问参数的值。
代码如下。
案例类别:
case class Site(id: String, domain: String)
case class Impression(id: String, h: Int, w: Int)
case class MyRequest(id: String, imp: Option[List[Impression]], site: Site)
Post请求路径:
path("submit") {
post {
entity(as[MyRequest]) { bid_request_params =>
val h = bid_request_params.imp.h
val w = bid_request_params.imp.w
val w = bid_request_params.site.domain
}
}
}
请求主体:
{
"id": "SGu1Jpq1IO",
"site": {
"id": "0006a522f",
"domain": "btmn.tld"
},
"imp": [{
"id": "1",
"h": 250,
"w": 300
}]
}
您遇到的问题是如何尝试访问
imp
类型字段的值Option[List[Impression]]
。根据你定义案例类的方式,如果你尝试手动创建
MyRequest
当你尝试做类似的事情时
是一个
Option
允许您使用现值或非现值概念的类。要使用此类提供的方法,您需要使用。大多数情况下是map
、flatMap
,filter
但还有其他方法,例如fold
、getOrEsle
,orElse
或者您甚至可以使用for yield
或pattern matching
。同样的情况也发生在 上
List
,如果不使用允许您遍历集合并使用列表包含的值执行某些操作的方法,您就无法直接访问元素的字段。话虽如此,不确定您是否需要重新定义有效负载的模式,或者您是否需要调整代码来对端点中收到的值执行某些操作。
这里有一些代码示例