Spray - 反序列化可选的查询参数

时间:2016-07-26 15:27:06

标签: scala spray spray-routing

来自 spray.io 文档页面:

  

color   将参数“color”的值提取为String

     

color.?   提取参数“color”的可选值为Option [String]

     

amount.as[Int]   将参数“amount”的值提取为Int,您需要在范围内使用匹配的反序列化器才能工作(另请参阅解组)

那么如何解析可选的Int值呢?像amount.?.as[Int]这样的东西似乎不起作用。

1 个答案:

答案 0 :(得分:4)

您可以在此处查看详细信息:https://github.com/spray/spray/blob/76ab89c25ce6d4ff2c4b286efcc92ee02ced6eff/spray-routing/src/main/scala/spray/routing/directives/NameReceptacle.scala

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]?