私はJavaでplayフレームワークを使用しています。 POSTリクエストで再生サーバーに送信されたリクエスト本文全体を取得したいのですが、どうすれば取得できますか?
_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
Play Framework 2.3では、Content-Typeヘッダーがapplication/jsonであっても、生のjsonテキストを取得できます。
def postMethod = Action(parse.tolerantText) { request =>
val txt = request.body
}
リクエストで次のコードを呼び出す場合。
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フレームワークの失敗です。
リクエストのJSON本文を文字列として提供します。 Play2.6.xでテストしましたval body = request.body.asJson.get.toString()