diSTSダッシュボードからダウンロード可能なSpringMVSShowcaseを勉強しています。Springがリクエストをどのようにマッピングするかを調査していますが、次のことを理解するのに問題があります。
送信ボタン付きのこのフォームがあります。
<li>
<form id="byConsumes" class="readJsonForm" action="<c:url value="/mapping/consumes" />" method="post">
<input id="byConsumesSubmit" type="submit" value="By consumes" />
</form>
</li>
送信ボタンをクリックすると、JSONオブジェクトを作成するJquery関数がHTTP Post Requestによって渡されます。これは、JQuery関数のコードです。
$("form.readJsonForm").submit(function() {
var form = $(this); // Variabile che si riferisce all'elemento nel DOM che ha scatenato l'evento click (il form)
var button = form.children(":first"); // Seleziona il bottone submit
var data = form.hasClass("invalid") ? // OPERATORE CONDIZIONALE: il form ha classe "invalid" ?
"{ \"foo\": \"bar\" }" : // SI: foo = bar
"{ \"foo\": \"bar\", \"fruit\": \"apple\" }"; // NO: foo= bar ; fruit = apple
/* AJAX CALL PARAMETER:
type: Say to the servlet path, the request is a POST HTTP Request
url: The address to which to send the call
data: the content of my data variable
contentType: an object having JSON format
dataType: the type of content returned by the server
*/
$.ajax({ type: "POST", url: form.attr("action"), data: data, contentType: "application/json", dataType: "text",
success: function(text) { MvcUtil.showSuccessResponse(text, button); },
error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, button); }});
return false;
});
私が作成して渡したJSONオブジェクトは、データ変数で表され、次のキー\値が含まれています:{\" foo \":\ "bar \"、\ "fruit \":\ "apple\"}
何かのようなもの:
foo:bar
果物:リンゴ
これで、コントローラーにこの要求を処理するメソッドがあります。
@RequestMapping(value="/mapping/consumes", method=RequestMethod.POST, consumes=MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody String byConsumes(@RequestBody JavaBean javaBean) {
return "Mapped by path + method + consumable media type (javaBean '" + javaBean + "')";
}
したがって、このメソッドが「マッピング/消費」パス(POSTリクエストのみ)に向けてHTTP POSTリクエストを処理することは明らかですが、次の項目の意味についてはよくわかりません。
消費=MediaType.APPLICATION_JSON_VALUE:これは正確にはどういう意味ですか?このメソッドはJSON形式のオブジェクトを受け取るので、何らかの方法で解析できるとSpringに伝えていると思いますが、それについてはよくわかりません。ドキュメントにはありません。
何が消費されますか?変数または注釈のようなもの?これは@RequestMappingアノテーションのパラメーターであるため、理解できませんが、Googleで検索すると、スタンドアロンのアノテーションとして使用されていることがわかります...
byConsumes()メソッドには、次の入力パラメーターがあります:@RequestBodyJavaBeanjavaBean。Springのドキュメントを読むと、次のことがわかります。@RequestBodyメソッドパラメーターアノテーションは、@ RequestBodyアノテーションを使用して、メソッドパラメーターをHTTPリクエスト本文の値にバインドする必要があることを示しています。
したがって、実際には、これは、HTTPリクエストの本文フィールド内にJSONオブジェクトがあり、このアノテーションを使用して、クラスJavaBeanを持つjavaBeanという名前のオブジェクトに変換していることを意味しますか?
私の断言が本当なら...JavaBeanタイプのオブジェクトはどのようなオブジェクトですか?いくつかの変数と対応するgetterおよびsetterメソッドのみを含むオブジェクト?(前のケースでは、2つの変数のみを含むオブジェクト:最初の変数はfooという名前で値が「bar」、2番目の変数は名前がfruitで値が「apple」)
正しいですか?
どうもありがとうアンドレア