Scala 来自播放操作的异步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)

我正在使用Play 2.6-RC2,有一个操作需要通过http调用外部组件(
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]