web-dev-qa-db-ja.com

POSTリクエストインプレイフレームワークjava

私はJavaでplayフレームワークを使用しています。 POSTリクエストで再生サーバーに送信されたリクエスト本文全体を取得したいのですが、どうすれば取得できますか?

13
Bourne

_play.mvc.Http_クラスを見てください。そこには(データ形式に応じて)いくつかのオプションがあります。

_RequestBody body = request().body();
MultipartFormData formData = request().body().asMultipartFormData();
Map<String, String[]> params = request().body().asFormUrlEncoded();
JsonNode json = request().body().asJson();
String bodyText = request().body().asText();
_

request().body().asText()をテストできます。つまり、コマンドラインからcUrlを使用します。

_curl  -H "Content-Type: text/plain" -d  'Hello world !' http://domain.com/your-post-action
_

...またはブラウザプラグインなどのツールを使用する: https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo

15
biesior

Play Framework 2.3では、Content-Typeヘッダーがapplication/jsonであっても、生のjsonテキストを取得できます。

def postMethod = Action(parse.tolerantText) { request =>
    val txt = request.body
}
12
Viktor Aseev

リクエストで次のコードを呼び出す場合。

String bodyText = request().body().asText();

content-Typeヘッダーがapplication/jsonの場合、bodyTextはnullになります

Content-Typeヘッダーがapplication/jsonの場合、最初にJsonNodeに変換せずに、提供されているコントローラーAPIを使用してJSONテキストを取得する方法はありません。

したがって、application/jsonがContent-Typeヘッダーである場合、これを行うための最良の方法は次のとおりです。

String bodyText = request().body().asJSON().toString();

Content-Typeヘッダーが何であれ、リクエストの本文を文字列として取得するメソッドが必要なため、これはPlayフレームワークの失敗です。

4

リクエストのJSON本文を文字列として提供します。 Play2.6.xでテストしました
val body = request.body.asJson.get.toString()

0
xrs