Scala 来自播放操作的异步http请求
我正在使用Play 2.6-RC2,有一个操作需要通过http调用外部组件(Scala 来自播放操作的异步http请求,scala,playframework,Scala,Playframework,我正在使用Play 2.6-RC2,有一个操作需要通过http调用外部组件(POST) 我在理解应该如何实施行动以及如何从POST请求中获得响应方面遇到问题 这是我目前拥有的,但我不知道如何继续: class ABCController @Inject() ( cc: ControllerComponents, langs: Langs, messagesApi: MessagesApi, ws: WSClient ) extends AbstractController(cc)
POST
)
我在理解应该如何实施行动以及如何从POST
请求中获得响应方面遇到问题
这是我目前拥有的,但我不知道如何继续:
class ABCController @Inject()
(
cc: ControllerComponents,
langs: Langs,
messagesApi: MessagesApi,
ws: WSClient
) extends AbstractController(cc) with I18nSupport {
def submit = Action.async { implicit request: Request[_] => {
val res = ws.url("http://127.0.0.1:8111/abc").post("test")
// How do I get the POST response and return async??
}
}
url方法返回一个未来的[WSResponse],需要映射才能解析。所以我认为你需要做这样的事情:
def submit = Action.async { implicit request: Request[_] => {
val res:Future[WSResponse] = ws.url("http://127.0.0.1:8111/abc").post("test")
res.map(wsres => {
Ok(wsres.json)
})
}
请参阅处理响应部分:如果您将注入的WSClient更改为
play.api.libs.ws.WSClient
,则您将获得与2.5中之前相同的行为,post
将返回未来的[WSResponse]
,您可以使用map
class ABCController @Inject()
(
cc: ControllerComponents,
langs: Langs,
messagesApi: MessagesApi,
ws: play.api.libs.ws.WSClient
) extends AbstractController(cc) with I18nSupport {
欢迎来到SO!为了得到一个更好的答案,这将有助于说明您迄今为止尝试了什么,您希望如何处理响应。给出并举例将是最好的。我还并没有尝试过编译的任何东西:-),但你们想用
res
做什么呢?想要发送它或从中提取一些数据吗?提取结果并使用这个(应该是JSON字符串)我使用的是2.6,这里不再是这种情况,它的这个新对象我不知道如何使用-据我所知,上面的代码应该可以很好地工作(即使在RC2中)。哪个部分让您感到不安?ws.url
返回CompletionStage[WSResponse]
而不是Future[WSResponse]
。对象来自play.libs.ws
,而不是来自play.api.libs.ws
——与注入的WSClient
相同。但是.post调用是否不返回将来的[WSResponse]?否-CompletionStage[WSResponse]