私は、新しい Play Framework 2 を使用してリクエスト パラメータを処理する方法について少し混乱していると言わざるを得ません。データは、リクエストの作成方法に関してさまざまな起源から取得されます。これまでのところ、可能性は次のとおりです。
1 - 単純な GET を実行する場合:
ctx().request().queryString()
2 - HTML フォームを使用して POST を実行する場合:
フォーム :
<form method="post" action="/">
<input type="hidden" name="foo" value="bar" />
<input type="hidden" name="t" value="1" />
<input type="hidden" name="bool" value="true" />
<input type="submit" name="submit" value="Submit" />
</form>
方法 :
public static Result test() {
ctx().request().queryString(); // {} ; As expected
ctx().request().body(); // contains data
ctx().request().body().asFormUrlEncoded(); // contains data
ctx().request().body().asJson(); // empty
return ok();
}
これは正常なようです。
ここで追加する@BodyParser.Of(BodyParser.Json.class)
と (非 JS の場合のフォールバックに Ajax POST と通常の POST の両方を受け入れるとします):
@BodyParser.Of(BodyParser.Json.class)
public static Result test() {
ctx().request().queryString(); // {} ; as Expected
ctx().request().body(); // contains data
ctx().request().body().asFormUrlEncoded(); // empty : Shouldn't this contains data since I posted them via a simple form ?!
ctx().request().body().asJson(); // empty
return ok();
}
そして、地獄が起こりました:単純なフォームの値がどれも入力されていない場合(asJson、asFormUrlEncodedなど)、どうすれば取得できますか?!
3 - AJAX 経由で POST を実行する場合:
// Code in JS used :
$.ajax({
'url': '/',
'dataType': 'json',
'type': 'POST',
'data': {'foo': 'bar', 't': 1, 'bool': true}
});
結果 :
public static Result test() {
ctx().request().queryString(); // {}
ctx().request().body(); // contains data
ctx().request().body().asFormUrlEncoded(); // contains data
ctx().request().body().asJson(); // empty
return ok();
}
と@BodyParser.Of(BodyParser.Json.class)
:
@BodyParser.Of(BodyParser.Json.class)
public static Result test() {
ctx().request().queryString(); // {}
ctx().request().body(); // contains data
ctx().request().body().asFormUrlEncoded(); // empty
ctx().request().body().asJson(); // empty : Shouldn't this contains data since I espect JSON ?!
return ok();
}
ここでの矛盾はasJson()
、ドキュメントによると、データを返す必要があるメソッドです
注: この方法では、非 JSON リクエストに対して 400 HTTP レスポンスが自動的に返されます。(http://www.playframework.org/documentation/2.0/JavaJsonRequests)
私が知りたいのは、HTML からの単純な投稿または POST を使用した Ajax リクエストを受け入れる POST に最適なデコレータ + メソッドは何ですか?