2016-10-20 17 views
0

最初のURLに移動すると、コントローラのhome()メソッドが呼び出されますが、2番目のURLに移動するとhomeTest()メソッドは呼び出されません。何故ですか?Spring mvcサーブレットのURLが正しくマップされない

404エラーが発生します。

http://localhost:9083/MYAPP/foo  ------ first url 
http://localhost:9083/MYAPP/foo/bar ------ second url 

web.xmlの

<servlet> 
     <servlet-name>springServlet</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
       <param-name>contextConfigLocation</param-name> 
       <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> 
     </init-param> 
     <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
     <servlet-name>springServlet</servlet-name> 
     <url-pattern>/foo/*</url-pattern> 
</servlet-mapping> 

コントローラー:

@RequestMapping(value="/foo", method = RequestMethod.GET) 
public String home(Model model){ 
    return "home"; 
} 

@RequestMapping(value="/foo/bar", method = RequestMethod.GET) 
public String homeTest(Model model){ 
    return "home"; 
} 
+0

どのようなエラーが表示されますか? –

+0

@JohnDonn SRVE0295E:エラー報告:404 – Nero

+1

SpringのDispatcherServletをデバッグしようとするか、それに応じてログレベルを変更できます。ある時点で、正しくリコールすれば、マップされたすべてのURLパスのリストが表示されます。これは何が起こっているのか理解するのに役立ちます。 –

答えて

-1

だけ変更:

<url-pattern>/foo/*</url-pattern> 

To

<url-pattern>/foo/**</url-pattern> 
+0

私はまだこの変更で404を取得します – Nero

+0

@Nero更新された回答を今すぐ確認してください。 – gschambial

+0

まだ同じです。 404エラー – Nero

3

RequestMappingHandlerMappingを設定する必要があります。

公式文書は、handler mappingsとそのプロパティのいくつかについて詳しく説明しています。ここでは関係1がalwaysUseFullPathです:

  • alwaysUseFullPathtrue場合は、春には、適切なハンドラを見つけるために、現在のサーブレットコンテキスト内で完全なパスを使用しています。 false (デフォルト)の場合、現在のサーブレットマッピング内のパスが使用されます。 サーブレットが/testing/*を用いてマッピングされ、 alwaysUseFullPathプロパティがtrueに設定されている場合、プロパティがfalseに設定されている場合、/viewPage.htmlは、要するに

を 使用されるのに対し、例えば、/testing/viewPage.html が、使用されています/foo/barのマッピングを見つけようとすると、サーブレット環境の一致部分である/fooが削除され、/barを使用してハンドラが検索されます。 /barにマップされたハンドラーがありません。

上記のプロパティをtrueに設定すると、フルパスが使用されます。

あなたはrequestMappingHandlerMapping

@Override 
public RequestMappingHandlerMapping requestMappingHandlerMapping() { 
    RequestMappingHandlerMapping handlerMapping = super.requestMappingHandlerMapping(); 
    handlerMapping.setAlwaysUseFullPath(true); 
    return handlerMapping; 
} 

または任意のメカニズムをオーバーライドすることによって、@Configuration注釈付きWebMvcConfigurationSupportサブクラスでこれを設定することができます(たとえばXML同等物があります)ご使用の構成に適しています。


正確な一致が特殊な場合は/fooです。これは特に重要ではありません。

関連する問題