我使用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"。我是斯卡拉的新手。请有人帮帮我。提前谢谢。
答案 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完成阶段。