在Scala中使用play ws的POST请求

时间:2017-07-03 14:47:34

标签: json scala post playframework

我使用play-ws standalone来在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"。我是斯卡拉的新手。请有人帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分:10)

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

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

有关详细信息,请查看official documentation

答案 1 :(得分:0)

当前接受的答案在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 Future,而不是一个Java完成阶段。