2017-06-22 10 views
1

Play 2.6-RC2を使用しており、http(POST)で外部コンポーネントを呼び出す必要があります。再生アクションからの非同期httpリクエスト

アクションを実装する方法と、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

ようこそ!より良い答えを得るためには、今まで何を試してみたか、何をして返答をしたいと言っているのかを助けるでしょう。寄付と例が最高になるでしょう – Mzf

+0

コンパイルされたものは試していません:-) –

+0

'res'で何をしたいですか?ちょうどそれを送信するか、そこからいくつかのデータを抽出したいですか? – Mzf

答えて

1

あなたはplay.api.libs.ws.WSClientに注入WSClientを変更する場合は、あなたが2.5で以前と同じ動作を取得します、postFuture[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方法は、あなたが解決にマップする必要がフューチャー[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

+0

私はこれを使用していますが、これ以上のケースではなく、この新しいオブジェクトは使用方法がわかりません - https:// www。 playframework.com/documentation/2.6.0-RC2/ScalaWS –

+0

私が見る限り、上記のコードはうまくいくはずです(RC2でも)。どの部分があなたを困らせているのですか? – jsdeveloper

+0

'ws.url'は' Future [WSResponse] 'ではなく、' CompletionStage [WSResponse] 'を返します。 オブジェクトは 'play.libs.ws'からであり、' play.api.libs.ws'からではありません - 注入された 'WSClient'と同じです。 –

関連する問題