2011-09-29 3 views
11

@RequestMappingに複数の値をマップすると(Multiple Spring @RequestMapping annotationsなど)、要求された値(URL)を取得できますか?@RequestMapping注釈を使用する際にリクエストされた値(URL)を取得する

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET) 
public String getCenter(Model model) throws Exception {  
    String requestedValue = getRequestedValue(); // I want this. 

    // I want to do something like this with requested value. 
    String result; 
    if (requestedValue.equals("center") 
     result = "center"; 
    else if (requestedValue.equals("left") 
     result = "left"; 
    return result; 
} 

答えて

4

春3.1.0より、URI Template Patterns with Regular Expressionsを使用できます。

@RequestMapping(value={"/{path:[a-z-]+}"}, method=RequestMethod.GET) 
public String getCenter(@PathVariable String path) throws Exception {    
    // "path" is what I want 
} 
1

使用RequestParam注釈:このように

。メソッドにHttpServletRequest型のパラメータを追加し、そこからgetParametersを追加することもできます。

+0

を使用することができます。 (彼の言葉の "値"はちょっと混乱しています) – Ralph

17

リクエスト(HttpServletRequest)自体をハンドラメソッドのパラメータとして持つことができます。したがって、あなたは "値"を取得するリクエストURLを調べることができます。

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET) 
public String getCenter(Model model, HttpServletRequest request) throws Exception {    
    String whatYouCallValue = request.getServletPath(); 
    .... 

ところで:私はrigthあなたを理解するとき、あなたは異なるURLではなく、異なる値を持つようにしたいです。

+0

ありがとうございます。私はそれを価値の名前と呼んでいます。しかし、今は混乱するかもしれません。私はいくつか修正します。 –

+0

きれいに見えるので私の答えを受け入れました。 –

0

最良の回答@Hugh_Leeに追加: このメソッドは、すべてのマップされていない要求のために動作します。このメソッドを2つ(または複数)の場合のみに使用する場合は、たとえば、 "/ center"と "/ left"を入力すると、次の操作を行うことができます。 「center」を「positionCenter」、「left」を「positionLeft」に変更(または別の共通語を追加)します。だから、コードは次のようになります:

@RequestMapping(value={"/{path:position+[A-Za-z-]+}"}, method=RequestMethod.GET) 
public String getCenter(@PathVariable String path) throws Exception {    
    // "path" is what I want 
} 
0

後の正規表現は、あなたの方法は、URLを/center/leftのためにのみ実行されるようになります。そして、@PathVariable注釈で値を得ることができます。

@GetMapping("/{path:^center$|^left$}") 
public ResponseEntity<?> whatIsThePath(@PathVariable String path){ 
    // path is either "center" or "left" 
} 
1

春3.1.0から、あなたはそれがないのhttp値、Sangdolは異なるURLを意味することを縫い目ServletUriComponentsBuilder

@RequestMapping(value={"/center", "/left"}, method=RequestMethod.GET) 
    public String getCenter(Model model) throws Exception {  
     UriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequest(); 
     String requestedValue = builder.buildAndExpand().getPath(); // I want this. 
     System.out.println(requestedValue); 
     // I want to do something like this with requested value. 
     String result="fail"; 
     if (requestedValue.equals("center")) 
      result = "center"; 
     else if (requestedValue.equals("left")) 
      result = "left"; 
     return result; 
    } 
関連する問題