在 Play for Scala 中转发 HTTP 请求
Forwarding HTTP requests in Play for Scala
这是我在 Play 2 中尝试实现的场景。5.x 对于 Scala(所有请求和响应都是 Json):
- 浏览器向 URL1 发送 HTTP 请求。
- URL1 用一些数据丰富它接收到的 Json,并将整个请求转发到 URL2。
- 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")
和自定义元素,例如基于您的配置的方案和端口。
这是我在 Play 2 中尝试实现的场景。5.x 对于 Scala(所有请求和响应都是 Json):
- 浏览器向 URL1 发送 HTTP 请求。
- URL1 用一些数据丰富它接收到的 Json,并将整个请求转发到 URL2。
- 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")
和自定义元素,例如基于您的配置的方案和端口。