从戏剧行动异步HTTP请求

问题描述 投票:1回答:2

我使用的播放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??
   }
}
scala playframework
2个回答
1
投票

如果你改变了注入WSClient到play.api.libs.ws.WSClient那么你会得到相同的行为以前在2.5,post将返回Future[WSResponse],你可以在此使用map

class ABCController @Inject()
(
  cc: ControllerComponents,
  langs: Langs,
  messagesApi: MessagesApi,
  ws: play.api.libs.ws.WSClient
) extends AbstractController(cc) with I18nSupport {

0
投票

该ws.url方法返回一个Future [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)
 })
}

请参阅处理响应部件:https://www.playframework.com/documentation/2.6.x/ScalaWS

© www.soinside.com 2019 - 2024. All rights reserved.