19

我尝试使用 Play2/Scala WS API 向服务端点发送HTTP POST请求。由于 HTTP POST 正文中没有要发送的参数,我如何使用

WS.url("http://service/endpoint).post()

我试过post()没有争论,但它给了我一个错误。

无法将 Unit 的实例写入 HTTP 响应。尝试定义一个 Writeable[Unit]

你能帮忙吗?

提前致谢...

4

3 回答 3

31

由于postawait 实现了WriteableContentTypeOf类型类的值,因此您可以使用Results.EmptyContentfrom play.api.mvc。(见API

所以我猜

WS.url("http://service/endpoint").post(Results.EmptyContent())

应该做。(没测试)

于 2013-03-06T18:59:08.503 回答
29

对于 Play 2.6 及更高版本,您必须使用play.api.libs.ws.EmptyBody.

import play.api.libs.ws.{EmptyBody, WSClient}
WS.url("http://service/endpoint).post(EmptyBody)

典型的错误是:

Cannot find an instance of play.api.mvc.Results.EmptyContent to WSBody. Define a BodyWritable[play.api.mvc.Results.EmptyContent] or extend play.api.libs.ws.ahc.DefaultBodyWritables
于 2017-08-02T09:28:27.067 回答
2

从 Play 2.8 开始,您不能使用WSRequest.post(body)带有空主体的方法,因为该BodyWritabletrait 需要一个非空的Content-Type

相反,您可以ws.url(u).execute("POST")发送没有正文的 HTTP POST 请求。

于 2020-03-24T14:04:42.927 回答