私は、STS ダッシュボードからダウンロード可能な Spring MVC ショーケースの例について勉強しています。
今回は、この例のコンバーター セクションについて学習していて、いくつか質問があります。
まず、私の見解では、次の 2 つのリンクがあります。
<li>
<a id="writeJsonAccept" class="writeJsonLink" href="<c:url value="/messageconverters/json" />">Write JSON via Accept=application/json</a>
</li>
<li>
<a id="writeJsonExt" class="writeJsonLink" href="<c:url value="messageconverters/json" />">Write JSON via ".json"</a>
</li>
最初のリンクは、URL への HTTP リクエストを生成します: messageconverters/json
2 番目のリンクは、URL への HTTP リクエストを生成します: /messageconverters/json.json (最初の URL とは異なり、このリンクは .json拡張子で終わります)
これらのリンクはどちらもclass="writeJsonLink"を持ち、これらのリンクのクリック イベントに関連して、次の JQuery コールバック関数が呼び出されます。
$("a.writeJsonLink").click(function() {
var link = $(this);
$.ajax({
url: this.href,
beforeSend: function(req) {
if (!this.url.match(/\.json$/)) {
req.setRequestHeader("Accept", "application/json");
}
},
success: function(json) {
MvcUtil.showSuccessResponse(JSON.stringify(json), link);
},
error: function(xhr) {
MvcUtil.showErrorResponse(xhr.responseText, link);
}});
return false;
});
この関数は AJAX 呼び出しのみを実行し、HTTP 応答がそのコンテンツをハンドラーに渡してビューに出力を表示するのを待ちます...わかりました...
リクエストを送信する前に、関数は URL が .json 拡張子で終わっていないかどうかをチェックします
このリクエストが .json 拡張子で終わらない場合、次のヘッダーが HTTP リクエストに追加されます。
受け入れる = アプリケーション/json
私が知っていることから、Accept ヘッダーは、HTTP 応答に対してどの特定のメディア タイプがかなり受け入れられるかを示しています。
この Request は、Jaxb2RootElementHttpMessageConverter を使用して JSON 形式に変換される評価済みオブジェクトを返すコントローラー クラスの次のメソッドから処理されます。
@RequestMapping(value="/json", method=RequestMethod.GET)
public ResponseEntity<JavaBean> writeJson() {
// Oggetto che rappresenta gli HTTP Header dell'HTTP Response
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.TEXT_PLAIN);
return new ResponseEntity<JavaBean>(new JavaBean("bar", "apple"), headers , HttpStatus.OK);
// return new JavaBean("bar", "apple"); }
さて、私の質問は、2 つのリンクの違いについてです。
最初のものは .json拡張子で終わっていないため、Accept ヘッダーが追加され、ブラウザーが JSON オブジェクトの受信を期待していると言ってapplication/json に設定されます
2 つ目は .json拡張子で終わるため、Jquery メソッドは Accept ヘッダーを設定しません。
しかし、これはどういう意味ですか?URL が .json で終わると、Accept ヘッダーが自動的に設定されますか? または、より一般的には、ある種の拡張子 (.xml など) で終わる URL がある場合、相対的な Accept ヘッダーが自動的に設定されますか?
または、単純にこの 2 番目のケースでは、Accept ヘッダーを設定しないでください。つまり、HTTP 応答の本文で受信できるメディア タイプを処理しないということですか?