7

私は次のものが必要な状況にありますRequestMapping

@RequestMapping(value={"/{section}"})
...method implementation here...

@RequestMapping(value={"/support"})
...method implementation here...

明らかな対立があります。私の望みは、Springがこれを自動的に解決/supportし、2番目のメソッドにマップし、他のすべてを最初のメソッドにマップすることでしたが、代わり/supportに最初のメソッドにマップします。

同じ場所で明示的にaをaでRequestMappingオーバーライドできるようにSpringに指示するにはどうすればよいですか?RequestMappingPathVariable

編集2:/supportマッピングがマッピングの前に来た場合は機能するよう/{section}です。残念ながら、。を使用した多数のメソッドを含むコントローラーが数十ありRequestMappingます。/{section}マッピングのあるコントローラーが最後に初期化されていることを確認するにはどうすればよいですか?それとも、プリインターセプターが進むべき道でしょうか?

編集1:RequestMappingこれは単純化されています。これら2つだけではあまり意味がないことを私は知っています)

4

4 に答える 4

4

Springを使用すると、シナリオをサポートするためにorg.springframework.web.HttpRequestHandlerを拡張できます。

メソッドを実装します。

@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}

これを使用して、着信リクエストを分析し、リクエストURLがリクエストURLの特別なサブセットの一部であるかどうかを判断し、適切な場所に転送します。

元:

@Override
public void handleRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
/** You will want to check your array of values and have this data cached  **/
if (urlPath.contains("/sectionName")) {
        RequestDispatcher requestDispatcher = request.getRequestDispatcher("sections" + "/" + urlPath);
        requestDispatcher.forward(request, response);
    }

}

そして、次のようなセクションを設定します。

@RequestMapping(value={"/sections/{sectionName}"})

これにより、既存のコントローラーマッピングが妨げられることはありません。

于 2012-10-01T14:36:24.423 に答える
1

これらのメソッドが2つ2つの異なるコントローラーで定義されている場合、問題は2つのコントローラーが同じURLにマップされていることです。現在、コントローラーの初期化の順序を制御していないため、順序はランダムです。

/supportの前にマッピングを初期化する必要があると思います/{section}

これを実現するには、コントローラーの「セクション」がコントローラーの「サポート」に依存することを定義してみてください。これが役に立たない場合は、両方のメソッドを1つのコントローラーにまとめ、「セクション」の前に「サポート」にマップされたメソッドを配置してみてください。

私はこれがここで機能しない他の提案です。「セクション」とは何ですか?限られた数の値を受け入れることができる場合は、として定義する必要がありますenum。この場合、サポートメソッドとセクションメソッドが1つのコントローラーにあるか、別々のコントローラーにある場合は、すべてが必要に応じて機能すると思います。

幸運を。

于 2012-09-28T21:35:44.227 に答える
1

これは問題ではないようです。これは有効なマッピングです。http://static.springsource.org/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-uri-templatesをご覧になる場合

セクション16.3.2に、@ RequestMappingを使用したリクエストのマッピングには、試行しているのとまったく同じことを行う2つのメソッドがあります。

クラスがコンパイルされていることを確認するには、クラスレベルで@RequestMapping( "/ someprefix")を追加して、URLが希望どおりに公開されているかどうかを確認してください。

バージョン3.1.0.RELEASEを使用してローカルで例を確認しましたが、問題はありませんでした。

回避策として(また、よく理解されているREST URIを提供するために、2番目のマッピングにコンテキストを追加します。

@RequestMapping(value={"client/support"}) // i.e: if you are working with clients
public ModelAndView getsupport(@PathVariable Long supportId){
    // do your code here something here
  }

もちろん、これがシステムに存在する一意のコントローラーである場合は有効です。それ以外の場合は、上記で提案したように、クラスレベルでRequestMappingを使用する必要があります。

これがお役に立てば幸いです。

于 2012-09-28T22:05:03.607 に答える
0

Spring 3.1.2ではこの動作は見られません。これは、古いバージョンのSpringのバグである可能性があります。これが私にとって問題なく実行される要点です-https ://gist.github.com/3802254

于 2012-09-28T21:51:37.667 に答える