【问题标题】: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 等待实现WriteableContentTypeOf 类型类的值, 您可以使用来自play.api.mvcResults.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
      

      【讨论】:

      • 内容类型呢?
      • 我仍然收到“无法将 play.api.libs.ws.WSBody 的实例写入 HTTP 响应。尝试定义可写的 [play.api.libs.ws.WSBody]”。所以我必须定义一个微不足道的BodyWritable[WSBody]?如何表示没有 Content-Type 标头?参考文献stackoverflow.com/questions/29784398/…
      【解决方案3】:

      从 Play 2.8 开始,您不能对空主体使用 WSRequest.post(body) 方法,因为 BodyWritable 特征需要非空 Content-Type

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-02-16
        • 2018-09-15
        • 2014-08-01
        • 1970-01-01
        • 2020-02-08
        • 2018-01-05
        • 1970-01-01
        相关资源
        最近更新 更多