Deserializer
は(akka-http 2.4.8
も同じ)akka-http 2.4.7
でUnmarshaller
のためだけの名前です
編集は:あなたはtype
という名前のクエリパラメータを抽出しているとしましょう、そしてあなたはパターン - ことができDeserializer
をしたいですパラメータがString
からMyType
に一致するようにします。
あなたのサーバーアプリでだroute
は、次のようになります。
object MyServer {
...
// Assuming that you're requiring a
// `type` parameter from a `POST` request
import MyType._
val route =
post {
parameter('type.as(myTypeDeserializer)) { myTypeValue =>
complete {
// `myTypeValue` is already pattern-matched
// to type `MyType` here thanks to `myTypeDeserializer`
...
}
}
}
...
}
あなたMyType
オブジェクトは次のようになります。
object MyType {
case object Type1 extends MyType
case object Type2 extends MyType
case object Type3 extends MyType
import akka.http.scaladsl.unmarshalling.Unmarshaller
// Here we pattern match the query parameter,
// which has type `String`, to a `MyType`
val stringToMyType = Unmarshaller.strict[String, MyType] {
case "type1" => MyType.Type1
case "type2" => MyType.Type2
case "type3" => MyType.Type3
}
}
したがってakka-http
は自動的にBadRequest
応答がスローされますユーザーが未サポートを要求した場合type
parame ter。
私は彼らが同じかもしれないと思った。しかし、もしそうなら、なぜコードフォントに 'Deserializer'があるのですか:http://doc.akka.io/docs/akka/2.4.7/scala/http/routing-dsl/directives/parameter-directives/parameters.html#説明それはそれがインターフェイスかそれ自身のクラスであることを意味します。また、クエリパラメータ - > caseクラスを変換したいので、サンプルが扱うHttpEntitiesとは何も関係ありません。 – akauppi
わかりました。私は自分の答えを更新しました:-) –
'Unmarshaller.strict'パラメータが実際に部分的な関数であることを示してくれてうれしいです。それを使用することができ、私の解決策(下記)も簡単になります。 – akauppi