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