在 Play for Scala 中转发 HTTP 请求

Forwarding HTTP requests in Play for Scala

这是我在 Play 2 中尝试实现的场景。5.x 对于 Scala(所有请求和响应都是 Json):

  1. 浏览器向 URL1 发送 HTTP 请求。
  2. URL1 用一些数据丰富它接收到的 Json,并将整个请求转发到 URL2。
  3. URL2 响应浏览器。

最后一点,我不确定是 URL2 可以将它发送回浏览器还是必须通过 URL1 来完成(我相信是后者)。

这是URL1中的请求(URL2是一个简单的request/response):

  val request: WSRequest = ws.url("/url2")
  val request2: WSRequest = request.withHeaders("Accept" -> "application/json")
  val data = Json.obj(
        "aaa" -> some_data1,
        "bbb" -> some_data2
   )
   val futureResponse: Future[JsValue] = request2.post(data).map {
            response => response.json
   }

当我发送未来时,我得到这个异常:

Execution exception[[NullPointerException: scheme]]

如何解决这个问题?

线索在函数名称中 - 它是 ws.url,而不是 ws.uri。您需要指定一个完整的路径。如果需要,您可以使用 ws.url("http://localhost:9000/url2") 和自定义元素,例如基于您的配置的方案和端口。