java – Spring Web MVC:对请求参数和路径变量使用相同的请求映射

是否有一种方法来表达我的Spring Web MVC控制器方法应该通过请求处理ID作为URI路径的一部分进行匹配…

@RequestMapping(method=RequestMethod.GET, value="campaigns/{id}")
public String getCampaignDetails(Model model, @PathVariable("id") Long id) {

…或者如果客户端在ID中作为HTTP请求参数在样式中发送…

@RequestMapping(method=RequestMethod.GET, value="campaigns")
public String getCampaignDetails(Model model, @RequestParam("id") Long id) {

这在我看来是一个相当普遍的真实世界的URL方案,我不想添加重复的代码,但我还是不能找到一个答案。任何建议非常欢迎。

编辑:事实证明,目前(与Spring MVC <= 3.0)没有办法实现这一点,参见Javi的答案内的讨论。

您可以为同一个函数设置映射url,并将id设置为可选。

@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"})
public String getCampaignDetails(Model model,
     @RequestParam(value="id", required=false) Long id,
     @PathVariable("id") Long id2)
{
}

虽然它会映射以及当id没有发送,但你可以控制这里方法。

编辑:以前的解决方案不工作,因为@PathVariable没有设置为null时,没有{null},它不能映射URL(感谢ngeek)。我认为,唯一可能的解决方案是创建两个方法,每个映射与其@MappingRequest和其中之一调用其他函数或重定向到其他URL(redirect:或forward:Spring前缀)。我知道这个解决方案不是你想要的,但认为这是你能做的最好的。事实上,你不是重复的代码,但你创建另一个函数来处理另一个URL。

http://stackoverflow.com/questions/2745471/spring-web-mvc-use-same-request-mapping-for-request-parameter-and-path-variable

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – Spring Web MVC:对请求参数和路径变量使用相同的请求映射