有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在使用@RequestMapping注释时获取请求的值(URL)

当我将多个值映射到@RequestMapping(比如Multiple Spring @RequestMapping annotations)时,我能得到请求的值(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) 个答案

  1. # 1 楼答案

    从Spring 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
    }
    
  2. # 2 楼答案

    使用RequestParam注释。还可以向方法中添加HttpServletRequest类型的参数,然后从中获取参数

  3. # 3 楼答案

    从Spring 3.1.0开始,您可以使用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;
        }
    
  4. # 4 楼答案

    下面的正则表达式将使您的方法仅对URL /center/left执行。您可以通过@PathVariable注释获得值

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