Spray - 反序列化可选查询参数
Spray - deserializing optional query parameter
来自 spray.io 文档页面:
color
extract value of parameter “color” as String
color.?
extract optional value of parameter “color” as Option[String]
amount.as[Int]
extract value of parameter “amount” as Int, you need a matching Deserializer in scope for that to work (see also Unmarshalling)
那么我该如何解析可选的 Int
值呢? amount.?.as[Int]
之类的东西似乎不起作用。
case class NameReceptacle[A](name: String) {
def as[B] = NameReceptacle[B](name)
def as[B](deserializer: FSOD[B]) = NameDeserializerReceptacle(name, deserializer)
def ? = as[Option[A]]
def ?[B](default: B) = NameDefaultReceptacle(name, default)
def ![B](requiredValue: B) = RequiredValueReceptacle(name, requiredValue)
}
简单的语法是
"amount".as[Option[Int]]
不幸的是,没有语法糖可以直接为选项类型创建 NameRecaptable
,但您可以分两步完成:
"amount".as[Int].as[Option[Int]]
?
是NameRecaptable[A].as[Option[A]]
的别名,所以可以使用如下代码(注意后缀运算符语法):
"amount".as[Int]?
来自 spray.io 文档页面:
color
extract value of parameter “color” as String
color.?
extract optional value of parameter “color” as Option[String]
amount.as[Int]
extract value of parameter “amount” as Int, you need a matching Deserializer in scope for that to work (see also Unmarshalling)
那么我该如何解析可选的 Int
值呢? amount.?.as[Int]
之类的东西似乎不起作用。
case class NameReceptacle[A](name: String) {
def as[B] = NameReceptacle[B](name)
def as[B](deserializer: FSOD[B]) = NameDeserializerReceptacle(name, deserializer)
def ? = as[Option[A]]
def ?[B](default: B) = NameDefaultReceptacle(name, default)
def ![B](requiredValue: B) = RequiredValueReceptacle(name, requiredValue)
}
简单的语法是
"amount".as[Option[Int]]
不幸的是,没有语法糖可以直接为选项类型创建 NameRecaptable
,但您可以分两步完成:
"amount".as[Int].as[Option[Int]]
?
是NameRecaptable[A].as[Option[A]]
的别名,所以可以使用如下代码(注意后缀运算符语法):
"amount".as[Int]?