Spring MVC:如何在标有@RequestMapping的方法中获取映射的URI

时间:2012-05-11 07:59:10

标签: spring spring-mvc

我目前正在开发Spring MVC应用程序,并且当我在web.xml文件中映射到单个DispatcherServlet的所有传入URL时,我想知道是否可以检索有效的URI映射。这是一个例子来说明我的担忧:

import static org.springframework.web.bind.annotation.RequestMethod.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {


    @RequestMapping(method={GET})
    public String processAllRequest(){
        return "viewName";
    }
}

由于我已将web.xml中的URL-MAPPING定义为“/ *”,因此所有传入的请求将最终出现在我的控制器类中,如上所示。例如,以下请求将由我的控制器中的processAllRequest()方法处理。

  • myApplicationContext /家
  • myApplicationContext /注销

是否有可能以某种方式检索映射的URI?也就是说,一旦我进入processAllRequest(),我怎么知道它是否被调用... / home或... / logout? 是否可以通过注入HttpServletRequest或其他对象作为方法的参数来检索此类信息?

2 个答案:

答案 0 :(得分:2)

如果你把它放在你的处理程序参数中,Spring会注入HttpServletRequest,所以你可以这样做。

但是如果你需要区分不同的URL,只需将它们放在不同的处理程序中:

@Controller
public class HomeController {

    @RequestMapping(value="/home", method={GET})
    public String processHome(){
        return "viewName";
    }

    @RequestMapping(value="/login", method={GET})
    public String processLogin(){
        return "viewName";
    }
}

web.xml中的映射将所有请求转发给spring servlet。您仍然可以根据需要编写尽可能多的@Controller,并使用类级别和方法级@RequestMapping将应用程序拆分为逻辑组件。

答案 1 :(得分:0)

我可能以一种模棱两可的方式提出我的问题,但我所寻找的却是路径变量。所以我的问题就这样解决了:

@Controller 公共课HomeController {

@RequestMapping(value="/{uri}", method={GET})
public String processMappedUri(@PathVariable uri){
    return uri;
}

}

每当我请求以下请求时,使用此解决方案,来自processMappedUri()方法的uri参数将保存变量值:

  • myApplicationContext / home - > uri = home
  • myApplicationContext / logout - > uri = logout