使用Spring 3.0,我可以有一个可选的路径变量吗?
例如
@RequestMapping(value = "/json/{type}", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
HttpServletRequest req,
@PathVariable String type,
@RequestParam("track") String track) {
return new TestBean();
}
Run Code Online (Sandbox Code Playgroud)
在这里,我想/json/abc或/json称为相同的方法.
一个明显的解决方法是声明type为请求参数:
@RequestMapping(value = "/json", method = RequestMethod.GET)
public @ResponseBody TestBean testAjax(
HttpServletRequest req,
@RequestParam(value = "type", required = false) String type,
@RequestParam("track") String track) {
return new TestBean();
}
Run Code Online (Sandbox Code Playgroud)
然后/json?type=abc&track=aa或/json?track=rr将工作
有没有办法表明我的Spring Web MVC控制器方法应该通过作为URI路径的一部分传递ID的请求来匹配...
@RequestMapping(method=RequestMethod.GET, value="campaigns/{id}")
public String getCampaignDetails(Model model, @PathVariable("id") Long id) {
Run Code Online (Sandbox Code Playgroud)
...或者如果客户端将ID作为样式中的HTTP请求参数发送...
@RequestMapping(method=RequestMethod.GET, value="campaigns")
public String getCampaignDetails(Model model, @RequestParam("id") Long id) {
Run Code Online (Sandbox Code Playgroud)
在我看来,这是一个非常常见的真实URL方案,我不想添加重复的代码,但我还没有找到答案.任何建议都非常欢迎.
编辑:事实证明,目前似乎(使用Spring MVC <= 3.0)没有办法实现这一点,请参阅Javi答案中的讨论.