【问题标题】:How to http post with an empty body request using WS API in Playframework 2 / Scala?如何在 Playframework 2 / Scala 中使用 WS API 以空的正文请求进行 http 发布?
【发布时间】:2013-02-21 17:14:06
【问题描述】:
我尝试使用 Play2/Scala WS API 向服务端点发送 HTTP POST 请求。由于 HTTP POST 正文中没有要发送的参数,我该如何发送它使用
WS.url("http://service/endpoint).post()
我尝试了post() 没有参数,但它给了我一个错误。
无法将 Unit 的实例写入 HTTP 响应。尝试定义一个
可写[单位]
你能帮忙吗?
提前谢谢...
【问题讨论】:
标签:
web-services
scala
rest
playframework-2.0
http-post
【解决方案1】:
由于post 等待实现Writeable 和ContentTypeOf 类型类的值,
您可以使用来自play.api.mvc 的Results.EmptyContent。 (见API)
所以我猜
WS.url("http://service/endpoint").post(Results.EmptyContent())
应该这样做。 (没测试)
【解决方案2】:
对于 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
【解决方案3】:
从 Play 2.8 开始,您不能对空主体使用 WSRequest.post(body) 方法,因为 BodyWritable 特征需要非空 Content-Type
相反,您可以使用ws.url(u).execute("POST") 发送没有正文的 HTTP POST 请求。