2016-07-26 11 views
1

От spray.io Страница документации:Spray - десериализации необязательного параметр запроса

color экстракта значение параметра «цвета» в качестве строки

color.? экстракта необязательного значение параметра «цвета», как Опция [String]

amount.as[Int] значение экстракции параметра «сумма» как Int, вы нужен соответствующий десериализатор в области видимости, что для работы (см также немаршалинг)

Так как я могу разобрать дополнительное Int значение? Что-то вроде amount.?.as[Int], похоже, не работает.

+1

вы пробовали ' "количество" .as [Int]' (см https: // GitHub .com/спрей/спрей/вики/Parameter-фильтры)? – devkat

+0

Yup, это работает. Благодарю. Вы можете извлечь его для ответа, поэтому я соглашусь с ним. –

ответ

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