有没有办法表明我的Spring Web MVC控制器方法应该通过作为URI路径的一部分传递ID的请求来匹配...
@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方案,我不想添加重复的代码,但我还没有找到答案 . 任何建议都非常欢迎 .
EDIT: 事实证明,目前似乎(使用Spring MVC <= 3.0)无法实现这一目标,请参阅Javi答案中的讨论 .
3 回答
您可以为同一功能设置映射网址,并将ID设置为可选 .
虽然在没有发送id的情况下它也会映射,但你可以在方法中控制它 .
EDIT :之前的解决方案不起作用,因为
@PathVariable
未设置为null
时没有{null}
并且无法映射URL(感谢ngeek) . 我认为唯一可能的解决方案是创建两个方法,每个方法用@MappingRequest
映射,其中一个方法调用另一个函数或重定向到另一个URL(重定向:或转发: spring 前缀) . 我知道这个解决方案不是你能做的最好的事情 . 实际上,您正在创建另一个函数来处理另一个URL .如果你仍然想坚持PathVariable方法,如果你得到400语法上不正确的错误,那么按照这种方法 -
@RequestMapping
注释现在支持设置path
属性而不是name
或value
. 使用path
,您可以实现此问题所需的映射: