2016-07-26 1 views
1

De spray.io page de documentation:Spray - désérialisation paramètre de requête en option

color d'extraire la valeur du paramètre « couleur » comme chaîne

color.? extrait valeur facultative du paramètre « couleur » comme Option [Chaîne]

amount.as[Int] extraire la valeur du paramètre "quantité" comme Int, vous ont besoin d'une correspondance désérialiseur portée pour ce travail (voir aussi unmarshalling)

Alors, comment puis-je analyser en option la valeur Int? Quelque chose comme amount.?.as[Int] ne semble pas fonctionner.

+1

Avez-vous essayé ' "quantité" .as [Int]' (voir https: // github .com/spray/spray/wiki/Paramètres-Filtres)? – devkat

+0

Ouais, ça marche. Merci. Vous pouvez l'extraire d'une réponse, alors je vais l'accepter. –

Répondre

4

Vous pouvez voir les détails ici: 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) 
} 

La syntaxe simple serait

"amount".as[Option[Int]] 

Malheureusement, il n'y a pas de sucre syntaxique pour créer une NameRecaptable une option taper directement, mais vous pouvez faites-le en deux étapes:

"amount".as[Int].as[Option[Int]] 

? est un alias pour NameRecaptable[A].as[Option[A]], de sorte que vous pouvez utiliser le code suivant (notez la syntaxe de l'opérateur postfix):

"amount".as[Int]?