1

この期間、私はSTSダッシュボードからダウンロード可能なSpringMVCShowcaseの例を調べています。

ヘッダーによるHTTPリクエストマッピングの機能に疑問があります。

ショーケースの例では、次の2つのリンクがあります。

        <li>
            <a id="byHeader" href="<c:url value="/mapping/header" />">By presence of header</a>
        </li>

        <li>
            <a id="byHeaderNegation" class="textLink" href="<c:url value="/mapping/header" />">By absence of header</a>
        </li>

ご覧のとおり、最初のリンクをクリックすると、「/ mapping / header」フォルダーへのHTTPリクエストが作成され、2番目のリンクをクリックすると、同じ「/ mapping/header」フォルダーへのHTTPリクエストが作成されます。

現在、これらのHTTPリクエストは、コントローラークラスの2つのメソッドによって管理されています。

最初のものは、次の方法で処理されます。

@RequestMapping(value="/mapping/header", method=RequestMethod.GET, headers="FooHeader=foo")
public @ResponseBody String byHeader() {
    System.out.println("Sono dentro byHeder()");
    return "Mapped by path + method + presence of header! (MappingController)";
}

そして2番目のものは次の方法で処理されます:

@RequestMapping(value="/mapping/header", method=RequestMethod.GET, headers="!FooHeader")
public @ResponseBody String byHeaderNegation() {
    System.out.println("Sono dentro byHeaderNegation");
    return "Mapped by path + method + absence of header! (MappingController)";
}

両方のリンクが同じフォルダ「/mapping/ header」に向けてHTTPリクエストを生成するため、2つのリクエストが2つの異なる方法で処理される理由がわかりません。

なぜ最初のものにはヘッダーがあり、2番目のものにはヘッダーがないのですか?

私はおそらく何かが足りないのですが、このことを理解するのを手伝ってくれませんか?

どうもありがとうアンドレア

4

1 に答える 1

3

最後のファイルでわかるように、ヘッダーによるマッピングを示すリンクは、をに設定するsrc/main/webapp/WEB-INF/views/home.jspAjaxを使用しています。FooHeaderfoo

これは、2つのメソッドを呼び出す方法です。

ヘッダーを設定しない場合(単純なHTMLリンクを意味する)、メソッドbyHeaderNegationが呼び出されますが、ヘッダーを設定する場合(この場合はAjaxを使用)、メソッドbyHeaderが呼び出されFooHeader=fooます。true

$("#byHeader").click(function(){
    var link = $(this);
    $.ajax({ url: this.href, dataType: "text", beforeSend: function(req) { req.setRequestHeader("FooHeader", "foo"); }, success: function(form) { MvcUtil.showSuccessResponse(form, link); }, error: function(xhr) { MvcUtil.showErrorResponse(xhr.responseText, link); }});
    return false;
});
于 2012-11-19T10:56:15.890 に答える