我使用的播放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??
}
}
如果你改变了注入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 {
该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