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