私はSpringMVCショーケースの例を研究しており、リクエストマッピングトピックについて簡単な説明をお願いします。
実際には、私の見解では、次の2つのリンクがあります。
<li>
<a id="byParameter" class="textLink" href="<c:url value="/mapping/parameter?foo=bar" />">By path, method, and presence of parameter</a>
</li>
<!-- PERSONALE -->
<li>
<a id="byParameter2" class="textLink" href="<c:url value="/mapping/parameter?foo2=blabla" />">(PERSONALE) By path, method, and presence of parameter with value="blabla"</a>
</li>
「/mapping/ parameter /」フォルダに向けてHTTPリクエストを生成しますが、パラメータが異なります
最初のパラメーターにはfooという名前のパラメーターがあり、2番目のパラメーターにはfoo2という名前のパラメーターがあります。
わかりました...今私はそうします:最初のリンク(「foo」という名前のパラメータを持つもの)によって生成されるHTTPリクエストはメソッドによって処理され、2番目のリンク(「foo2」という名前のパラメータを持つもの)によって生成されるHTTPリクエスト)他の方法で処理されます
したがって、私のコントローラークラスでは、次の2つのメソッドを追加してこのようにすることを考えました。
@RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="foo")
public @ResponseBody String byParameter() {
return "Mapped by path + method + presence of query parameter!";
}
@RequestMapping(value="/mapping/parameter", method=RequestMethod.GET, params="foo2")
public @ResponseBody String byParameter(@RequestParam("foo2") String foo2) {
return "Mapped by path + method + presence of query parameter! (MappingController). Parameter value = " + foo2;
}
(コードの2番目のピックアップもパラメーター値ですが、これは重要ではないと思います)
問題は、2番目のリンクをクリックするとエラーが発生し、スタックトレースに次のエラーメッセージが表示されることです。
2012年11月24日19:56:42org.apache.catalina.core.StandardWrapperValveがSEVEREを呼び出します:パス[/ spring-mvc-showcase]のコンテキストでサーブレット[appServlet]のServlet.service()が例外をスローしました[リクエスト処理に失敗しました; ネストされた例外はjava.lang.IllegalStateExceptionです:HTTPパスにマップされたあいまいなハンドラーメソッド'http:// localhost:8080 / spring-mvc-showcase / mapping / parameter':{public java.lang.String org.springframework.samples.mvc .mapping.MappingController.byParameter(java.lang.String)、public java.lang.String org.springframework.samples.mvc.mapping.MappingController.byParameterNegation()}]ルート原因java.lang.IllegalStateException:マップされたあいまいなハンドラーメソッドHTTPパスの場合'http:// localhost:8080 / spring-mvc-showcase / mapping / parameter':{publicjava.lang.Stringorg.springframework.samples.mvc.mapping.MappingController。
アプリケーションはパス「/mapping/ parameter」にどのメソッドを使用するかを理解できないようですが、なぜですか?
最初のメソッドには、「/ mapping / parameter」フォルダーへのHTTPリクエストを処理する必要があることを明示的に指定する@RequestMappingアノテーションが付けられ、fooという名前のパラメーターがあります。2番目のメソッドは、HTTPリクエストを処理する必要があることを示す@RequestMappingのアノテーションです。 「/mapping/parameter」フォルダとfoo2という名前のパラメータがあります...あいまいな状況ではないと思います
問題は、2つのメソッドが異なる署名を持っているために同じ名前であり、2つの異なるメソッドであるということではないと思います...(2番目のメソッドの名前も変更しようとしましたが、問題は残ります)
また、奇妙な考えは、最初のリンク(「foo」という名前のパラメーターでHTTPリクエストを生成するリンク)をクリックすると、最初のメソッドによって正しく処理されるということです...なぜこれはあいまいではないのですか?!?!
どうすれば解決できますか?
どうもありがとうございます
アンドレア