使用 Akka HTTP(正式名称为 Spray)的 GET 请求的查询参数

2024-03-12

Akka HTTP(正式名称为 Spray)的功能之一是它能够自动将数据从 json 来回编组和解组到案例类等。我已经成功地使其正常工作。

目前,我正在尝试创建一个使用查询参数执行 GET 请求的 HTTP 客户端。目前的代码如下所示:

val httpResponse: Future[HttpResponse] =
  Http().singleRequest(HttpRequest(
    uri = s"""http://${config.getString("http.serverHost")}:${config.getInt("http.port")}/""" +
          s"query?seq=${seq}" +
          s"&max-mismatches=${maxMismatches}" +
          s"&pam-policy=${pamPolicy}"))

嗯,那不太漂亮。如果我可以传入一个包含查询参数的案例类,并让 Akka HTTP 自动生成查询参数,就像 json 那样,那就太好了。 (此外,Akka HTTP 的服务器端有一种解析 GET 查询参数的优雅方式,因此人们会认为它也有一种优雅的方式来生成它们。)

我想做类似以下的事情:

val httpResponse: Future[HttpResponse] =
  Http().singleRequest(HttpRequest(
    uri = s"""http://${config.getString("http.serverHost")}:${config.getInt("http.port")}/query""",
    entity = QueryParams(seq = seq, maxMismatches = maxMismatches, pamPolicy = pamPolicy)))

只是,上面的方法实际上不起作用。

我想要的东西可以通过 Akka HTTP 实现吗?或者我只需要以老式的方式做事?即,显式生成查询参数,就像我在上面的第一个代码块中所做的那样。

(我知道,如果我将其从 GET 更改为 POST,我可能可以让它更像我希望的那样工作,从那以后我可以获取从案例自动转换的 POST 请求的内容类到 json,但我真的不想在这里这样做。)


您可以利用Uri类做你想做的事。它提供了多种方法来使用以下方法将一组参数放入查询字符串中:withQuery方法。例如,您可以执行以下操作:

val params = Map("foo" -> "bar", "hello" -> "world")
HttpRequest(Uri(hostAndPath).withQuery(params))

Or

HttpRequest(Uri(hostAndPath).withQuery(("foo" -> "bar"), ("hello" -> "world")))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Akka HTTP(正式名称为 Spray)的 GET 请求的查询参数 的相关文章

  • Akka 远程 `system.shutdown()` 导致 EndpointDisociatedException?

    我有简单的客户端和服务器设置 在发送所有异步请求并在服务器确认后的某个时刻 客户端调用system shutdown 这导致服务器akka remote EndpointDisassociatedException和一堆日志错误 如下所示
  • Akka-http:如何从请求中获取自定义标头?

    我在请求中将以下标头发送到我的 akka http api Content type application json Accept application json AppId some id 如何在我的 akka http 路由中获取
  • 反转 HList 并转换为类?

    我使用 Shapeless 在 Akka 中累积物化值作为 HList 并将其转换为案例类 对于这个问题 您不必了解 Akka 太多 但默认方法将物化值累积为递归嵌套的 2 元组 这并不是很有趣 因此 Shapeless HLists 似乎
  • Akka 和 Typesafe 配置版本问题

    我尝试在 Tomcat 服务器上使用 akka 2 1 0 但我收到一个错误 要求我将配置库也放在类路径上 好吧 这不是问题 我将 Typesafe 的配置库 版本 1 0 0 最新 放在 lib 文件夹中 但是 我总是收到错误 8d315
  • 通过 Akka IO 和套接字的协议缓冲区消息

    我碰到这篇博文 http cognitiveentity wordpress com 2012 02 23 simpler akka io example 我发现它很棒并且很有启发性 展示了如何对发送到 Akka IO 套接字服务器的字符串
  • akka-camel 2.2.1 使用 Spring XML 定义路由

    我使用的是 akka camel 2 2 1 需要分别配置往返于 Consumer 和 Producer Actor 的路由 我目前正在定义路由并以编程方式将它们添加到 CamelExtension 内的内部 Camel 上下文中 如下所示
  • 停止系统中的所有参与者而不关闭系统本身?

    在Akka 2 0中 有没有一个好的方法来关闭 user路径下的所有actor 例如 假设我执行以下操作 val system ActorSystem create mySystem system actorOf Props new MyA
  • 如何将参与者消息限制为特定类型?

    In Akka http akka io 除了使用 RPC 风格编程模型的 Typed Actor API 之外 是否有其他方法可以将发送给 Actor 的消息限制为特定的静态类型 我可以在 Akka 中使用消息传递风格而不放弃 Actor
  • 节点如何知道哪些节点已经看到集群当前状态?

    我正在阅读 akka 文档 并在理解他们的实现方式时遇到了一些麻烦Gossip 文档在这里 http doc akka io docs akka 2 4 common cluster html Gossip Protocol 让我困惑的部分
  • 在 Akka 中等待多个结果

    在 Akka 中等待多个 actor 结果的正确方法是什么 The 反应式编程原理 https www coursera org course reactiveCoursera 课程有一个使用复制键值存储的练习 在不详细讨论分配的细节的情况
  • 持久 Akka 邮箱和无损

    在 Akka 中 当一个 actor 在处理消息时死亡 内部onReceive 该消息丢失 有没有办法保证无损 有没有办法配置 Akka 始终保留消息before将他们发送到onReceive 以便在演员死亡时可以恢复并重播 也许像持久邮箱
  • Spray 如何找到资源 - 例如javascript

    使用 Spray io 构建我的第一个 Servlet 非常简单 但从未找到标头中引用的资源 头 gt 这些资源必须放在哪个目录中 或者如何引导喷雾去那里查找 简单的问题 但我无法弄清楚 非常感谢 Girgl 对于 Spray 路由 我使用
  • Akka 的语言和产品替代品是什么?

    现在我正在看游戏框架 https www playframework com 并且非常喜欢它 Play 中提供的功能中最受宣传的部分之一是Akka http akka io 为了更好地理解 Akka 以及如何正确使用它 您能告诉我其他语言或
  • Akka 2.1.2 Scheduler 出现问题(“系统”无法识别)

    根据这些示例 我试图运行一个非常简单的循环函数循环 http doc akka io docs akka 2 1 2 scala scheduler html http doc akka io docs akka 2 1 2 scala s
  • 如何在不使用 zip() 的情况下将不同类型的 Future 组合成一个 Future

    我想创造一个类型的未来Future Class1 Class2 Class3 从下面的代码 然而 我发现做到这一点的唯一方法是使用 zip 我发现这个解决方案很丑陋而且不是最佳的 谁能启发我 val v for a lt val f0 Fu
  • 控制 Akka 中消耗大量内存的 actor 的生成

    我使用 akka 的 actor 模型构建了一个分布式流机器学习模型 通过向 Actor 发送训练实例 训练数据 来异步训练模型 对这些数据的训练会占用计算时间并改变参与者的状态 目前我正在使用历史数据来训练模型 我想运行一堆不同配置的模型
  • 如何确定 akka 中生成的 actor 数量?

    我最近开始研究 Akka 2 0 框架 并且能够运行一些代码 生成执行简单 Oracle 数据库调用 执行简单计算等的 Actor 但是在生产中什么也没有 我想知道的是 是否有一般的经验法则或最佳实践来确定为某些类型的任务生成多少个参与者
  • Java反应式框架的比较[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我看到许多框架 库声称它们可以帮助用 Java 构建响应式应用程序 例如 Akka Vert x RxJava Reactor QBit 等 他
  • Akka 和 ReactiveMongo

    我正在尝试找到在集群工作人员之间共享相同连接池的最佳方法 我有以下结构 Master Actor gt Worker Actors 最多 100 个或更多 gt MongoDB 我想在工作人员和 MongoDB 之间放置reactivemo
  • 如何解析 Spray-routing 中的 get 请求参数?

    这就是代码部分的样子 get respondWithMediaType MediaTypes application json entity as HttpRequest obj gt complete println obj ok 我可以

随机推荐