Play Framework 2.1(Scala) 调用 WebService 返回 Response
在 Play Framework 2.1 中用 Scala 编程进行 WebService 调用想返回 Response,或 xml, json 结果时,初入可能会费些功夫,因为无论是 WS.url.get,或 post, put 方法返回的都是个 Future[Response] 对象,也就是如何从 Future[Response] 如何分离出 Response 对象的问题。
这里我们 map, 或 match/case 也可以取出其中 response 对象来,如果要作为结果返回还要用到 Await.result() 方法。
为了不把代码出现在摘在页面中,这里插点内容,像是拖延时间的战术。
如果你在使用 Play Framework 2 with Scala 时碰到这个错误:
Error: Cannot find an implicit ExecutionContext, either require one yourself or import ExecutionContext.Implicits.global
依照 899 号 Issue, 解决办法是你必须加上这个引入语句:
import play.api.libs.concurrent.execution.Implicits._
因为里面有我们需要用到的隐式的 global 吧。
下面是我用来请求 WebService 返回 Response 的代码:
response 有上面列出的那些属性可以直接获得状态,xml, 或 json 类型数据
看了网上的,其实这个更不错:
参考: Webservice call in Play2 Scala 永久链接 https://yanbin.blog/play-framework-2-1-scala-webservice-return-response/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。
这里我们 map, 或 match/case 也可以取出其中 response 对象来,如果要作为结果返回还要用到 Await.result() 方法。
为了不把代码出现在摘在页面中,这里插点内容,像是拖延时间的战术。
如果你在使用 Play Framework 2 with Scala 时碰到这个错误:
Error: Cannot find an implicit ExecutionContext, either require one yourself or import ExecutionContext.Implicits.global
依照 899 号 Issue, 解决办法是你必须加上这个引入语句:
import play.api.libs.concurrent.execution.Implicits._
因为里面有我们需要用到的隐式的 global 吧。
下面是我用来请求 WebService 返回 Response 的代码:
1package services
2
3import play.api.libs.ws._
4
5import play.api.libs.json._
6import scala.concurrent.Future
7import play.api.libs.concurrent.Execution.Implicits._
8import com.ning.http.client.Realm.AuthScheme
9
10import scala.concurrent.Await
11import scala.concurrent.duration.DurationInt
12
13object MyWebService {
14
15 def getJson(url: String) : Response = {
16
17// Future[Response]
18 val responseFuture = WS.url(url).withAuth("name", "pass", AuthScheme.BASIC).get
19 val response = Await.result(responseFuture, 5 seconds)
20
21// response.status
22// response.statusText
23// response.xml
24// response.json
25 response
26 }
27}response 有上面列出的那些属性可以直接获得状态,xml, 或 json 类型数据
看了网上的,其实这个更不错:
1import play.api.libs.ws.WS
2import play.api.libs.concurrent.Execution.Implicits._
3import scala.concurrent.Await
4import scala.concurrent.duration._
5import scala.language.postfixOps
6
7object WebserviceCallParseXML {
8
9 val responseFuture = WS.url("http://api.server.com/rest/")
10 .withAuth("test", "test", com.ning.http.client.Realm.AuthScheme.BASIC)
11 .get()
12
13 val resultFuture = responseFuture map { response =>
14 response.status match {
15 case 200 => Some(response.xml)
16 case _ => None
17 }
18 }
19
20 val result = Await.result(resultFuture, 5 seconds)
21
22 println(if (result.isDefined) result.get else "No result found" )
23
24}参考: Webservice call in Play2 Scala 永久链接 https://yanbin.blog/play-framework-2-1-scala-webservice-return-response/, 来自 隔叶黄莺 Yanbin's Blog
[版权声明]
本文采用 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。