【问题标题】:POST request using play ws in Scala在 Scala 中使用 play ws 发布请求
【发布时间】:2017-07-03 14:47:33
【问题描述】:

我正在使用 play-ws 独立在 scala 中使用 REST 服务。

val data = Json.obj("message" -> "How are you?")
wsClient.url("http://localhost:5000/token").post(data).map { response =>
      val statusText: String = response.statusText
      println(response.body)
    }

当我运行它时,我得到以下错误,

Cannot find an instance of play.api.libs.json.JsObject to WSBody. Define a BodyWritable[play.api.libs.json.JsObject] or extend play.api.libs.ws.ahc.DefaultBodyWritables
    wsClient.url("http://localhost:5000/token").post(data).map { response =>

它告诉定义一个bodywritable。我已经阅读了文档,但没有得到“BodyWritable”。我是斯卡拉的新手。请任何人帮助我。提前致谢。

【问题讨论】:

    标签: json scala post playframework


    【解决方案1】:

    您需要为 json 对象导入 BodyWritables,将以下导入语句添加到您的源文件中

    import play.api.libs.ws.JsonBodyReadables._
    import play.api.libs.ws.JsonBodyWritables._
    

    欲了解更多信息,请查看official documentation

    【讨论】:

      【解决方案2】:

      当前接受的答案在 Scala Play 2.7.x 中不起作用(可能还有一些早期版本)。

      我在文档中找不到它,但您需要在 ws 对象上显式调用 asScala。例如:

        val data = Json.obj("message" -> "How are you?")
        ws
          .asScala()
          .url("http://someurl.com")
          .post(data)
          .map(response => {
            //do something with response
          })
      

      注意:这也返回一个 scala 未来而不是一个 java 完成阶段。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-13
        • 1970-01-01
        • 1970-01-01
        • 2013-02-21
        • 2019-03-13
        • 1970-01-01
        相关资源
        最近更新 更多