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的形式将ID作为HTTP请求参数发送…

@RequestMapping(method=RequestMethod.GET, value="campaigns")

public String getCampaignDetails(Model model, @RequestParam("id") Long id) {

在我看来,这是一种非常普遍的现实URL方案,在该方案中我不想添加重复的代码,但是我还找不到答案。任何建议都非常欢迎。

事实证明,当前 _(使用Spring MVC <= 3.0)_似乎没有办法实现这一目标,请参阅Javi答复中的讨论。

回答:

您可以为同一功能设置两个映射网址,并将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。

以上是 Spring Web MVC:对请求参数和路径变量使用相同的请求映射 的全部内容, 来源链接: utcz.com/qa/405809.html

回到顶部