/ / Spray - paramètre de requête facultatif de désérialisation - scala, spray, spray-routing

Pulvérisation - désérialisation du paramètre de requête optionnel - scala, spray, routing-spray

De spray.io page de documentation:

color extrait la valeur du paramètre «color» en tant que chaîne

color.? extraire la valeur optionnelle du paramètre “color” en tant qu'option [String]

amount.as[Int] Pour extraire la valeur du paramètre "amount" en tant que Int, vous avez besoin d’un désérialiseur correspondant pour que cela fonctionne (voir aussi Unmarshalling).

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

Réponses:

4 pour la réponse № 1

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’existe pas de sucre syntaxique pour créer un NameRecaptable pour une option, tapez directement, mais vous pouvez le faire en deux étapes:

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

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

"amount".as[Int]?