Joh*_*ire 1 rest json web-services scala playframework
我正在使用Play scala WS向Web服务器发送REST api调用,有时会出现异常错误.Json被发送到服务器,服务器的响应可能是以下之一.
如何修改以下代码以获取网页内容而不会出现异常错误?
import play.api.libs.ws._
var tempText = Helpers.await(WS.url("localhost:9000/someApi").post(jsonToSend)).body
println(tempText)
tempJson = Json.parse(tempText)
println(tempJson)
Run Code Online (Sandbox Code Playgroud)
很大程度上取决于下游API服务器的"正确"程度.
在一个完美的世界里,我们可能会断言以下事实:
status是200,HTTP Content-Type标头是application/jsonstatus是404或类似的非200,HTTP Content-Type头是application/jsonstatus不是200,Content-Type是text/html如果上面的断言都是正确的,那么我们可以简单地在响应处理上加上一点"保护",而不是仅仅跳入并尝试将其解析为JSON:
val futureOptionalResult = WS.url("localhost").post("...").map { response =>
response.status match {
case 200 => {
println(response.body)
println(response.json)
Some(response.json)
}
case _ => {
println(s"Not OK: ${response.status} - body is: ${response.body}")
None
}
}
}
Run Code Online (Sandbox Code Playgroud)
一些说明:
await和更好地扩展一样简单response.json返回与Json.parse身体上显式相同的东西Option[JsValue]保存返回的JSON,如果它工作如果上述假设不成立,则可能需要对Content-Type标题进行更深入的检查,对status值和/或其他属性进行更细粒度的切换response.祝好运!