来自Play操作的异步http请求

时间:2017-06-22 10:44:02

标签: scala playframework

我正在使用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??
   }
}

2 个答案:

答案 0 :(得分: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 {

答案 1 :(得分: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