STSダッシュボードからダウンロード可能なSpring MVC showwcaseを勉強しています。
現在、Spring MVC がリソースをマッピングする方法を研究していますが、次のことを理解するのに問題があります。
したがって、「/mapping/produces」フォルダーへの HTTP リクエストを生成する次のリンクがあります。
<li>
<a id="byProducesAcceptJson" class="writeJsonLink" href="<c:url value="/mapping/produces" />">By produces via Accept=application/json</a>
</li>
ご覧のとおり、このリンクには「writeJsonLink」という名前のクラスがあり、このクラスには、リンクのクリックでトリガーされる次の JQuery 関数が定義されています。
$("a.writeJsonLink").click(function() {
var link = $(this); // Variable that referer the clicked link in the DOM
// Execute AJAX call
$.ajax({
url: this.href, // Address to which the request is addressed
beforeSend: function(req) { // Before send the Http Request call a function passing it the referer to the HTTP Request
if (!this.url.match(/\.json$/)) { // If the url of the clicked link end with .json
req.setRequestHeader("Accept", "application/json"); // Add to the HTTP Request theheader Accept: application/json
}
},
success: function(json) {
MvcUtil.showSuccessResponse(JSON.stringify(json), link);
},
error: function(xhr) {
MvcUtil.showErrorResponse(xhr.responseText, link);
}});
return false;
});
OK、コードの動作を理解するためにコードにコメントしました (私は Javascript と JQuery の初心者です)。このスクリプトの動作は次のように思われます。 Web アプリケーションへの ajax 呼び出しは、クリックされたリンクの URL が .json 拡張子で終わるアドレスであるかどうかを確認します。
この場合、私の URL は .json で終わっていません (私の URL は FOLDER: /mapping/produces に向けられており、.json ファイルに向けられていないため)、関数はヘッダー "Accept" を追加しません。 application/json" を HTTP リクエストのボディ フィールドに追加します。
さて、私の問題は、このコードが何をするのかを理解することです:
success: function(json) {
MvcUtil.showSuccessResponse(JSON.stringify(json), link);
},
成功した場合、json という名前のパラメーターを持つ関数を呼び出します。この関数は、単純に showSuccessResponse という名前のメソッドを呼び出して、String に変換された json obkect とリンクを渡します。
これで、showSuccessResponse が何をするかがわかりました (これを使用して、ページ内のクリックされたリンクの横にメッセージを表示する span タグを作成します)。
問題は次のとおりです。成功した場合に関数に渡すjsonパラメーターは誰ですか。このパラメーターを文字列に変換していますが、いつ、どこでIDを作成しましたか?
リンクをクリックして例を実行すると、(リンクの隣に) 次のメッセージが表示されます: {"foo":"bar","fruit":"apple"}
次のキー\値の内容を持つJSONオブジェクトが作成されたようです:
フー:バー
果物:りんご
しかし、それはどこで作成されたのですか?!?! ブーブー
リンクをクリックしてメソッドを実行すると、スタックトレースに次のメッセージが表示されます。
01:27:38 [tomcat-http--28] DispatcherServlet - DispatcherServlet with name 'appServlet' processing GET request for [/spring-mvc-showcase/mapping/produces]
01:27:38 [tomcat-http--28] RequestMappingHandlerMapping - Looking up handler method for path /mapping/produces
01:27:38 [tomcat-http--28] RequestMappingHandlerMapping - Returning handler method [public org.springframework.samples.mvc.mapping.JavaBean org.springframework.samples.mvc.mapping.MappingController.byProducesJson()]
01:27:38 [tomcat-http--28] DispatcherServlet - Last-Modified value for [/spring-mvc-showcase/mapping/produces] is: -1
01:27:38 [tomcat-http--28] RequestResponseBodyMethodProcessor - Written [JavaBean {foo=[bar], fruit=[apple]}] as "application/json" using [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@360eb2b8]
01:27:38 [tomcat-http--28] DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'appServlet': assuming HandlerAdapter completed request handling
01:27:38 [tomcat-http--28] DispatcherServlet - Successfully completed request
何が起こるか理解するのを手伝ってもらえますか?