2012-04-09 53 views
8
@RequestMapping(value = {"/userDetails", "/userDetails/edit/{id}"}, method = RequestMethod.GET) 
public String userDetails(Map Model,****) { 
//what goes here? 
} 

userDetailsメソッドの引数は何ですか?そして、方法内で/userDetails/userDetails/edit/9を区別するにはどうすればよいですか?複数の値を持つRequestMappingをパス変数で使用 - Spring 3.0

+0

[この質問](http://stackoverflow.com/questions/2745471/spring-web-mvc-use-same-request-mapping-for-の重複リクエストパラメータとパス変数) – nobeh

答えて

15

理想的には、メソッドの引数に注釈@PathVariableを使用してpathvariable得ることができますが、ここであなたはlocalhost:8080/domain_name/userDetailsのような供給要求が、この場合には何のidが@PathVariableに供給されませんしながら、そう、これはエラーを与えるURL {"/userDetails", "/userDetails/edit/{id}"}の配列を使用していました。

ですから、メソッド内の引数のHttpServletRequest要求を使用して(リクエストが通過来ている)の違いを取得し、以下のように、この要求オブジェクトを使用することができます -

文字列のURI = request.getRequestURI();

コードは次のようである -

@RequestMapping(value = {"/userDetails", "/userDetails/edit/{id}"}, method=RequestMethod.GET) 
    public String userDetails(Map Model,HttpServletRequest request) { 
    String uri = request.getRequestURI(); 
    //put the condition based on uri 
} 
+0

method = RequestMethod.GETとmethod = RequestMethod.POSTを別々に使用します。その場合、私は引数としてHttpServletRequestを渡すことはありません。周りに他の方法はありますか? –

+6

これら2つのリクエストマッピングを2つの方法に分ける理由は何ですか?実装する共通の機能がある場合は、その共通のコードを別のプライベートメソッドに置き、それに応じてこのメソッドを呼び出すことができます。 –

関連する問題