gpt4 book ai didi

akka-http - 如何为 akka-http 查询参数提供自定义反序列化器?

转载 作者:行者123 更新时间:2023-12-04 12:51:09 25 4
gpt4 key购买 nike

akka-http 2.4.7 reference声明可以进行自定义 Deserializer s 转换查询参数,而不将它们存储在中间变量中:

"amount".as[Int] extract value of parameter "amount" as Int, you need a matching Deserializer in scope for that to work (see also Unmarshalling)

"amount".as(deserializer) extract value of parameter "amount" with an explicit Deserializer



然而, Deserialized parameter该页面上的示例未显示如何使用自定义解串器。

我如何定义一个,以便我可以说,例如 .as[MyType] ?

我认为文档有问题,因为我找不到 Deserializer在 akka 来源中的任何地方提到: search

enter image description here

如何截图 Deserializer在 Akka 文档中排版。

最佳答案

一个 Deserializer只是 Unmarshaller 的名称在 akka-http 2.4.7 (与 akka-http 2.4.8 相同)

编辑 :假设您正在提取名为 type 的查询参数,并且您想要一个 Deserializer可以模式匹配的 type来自 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范围。

关于akka-http - 如何为 akka-http 查询参数提供自定义反序列化器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38265220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com