Spring MVC中的可选路径段

阅读2010年的这篇 (Spring 3)文章,它讨论了使用扩展来提供包含可选路径段的便捷方法:

@RequestMapping("/houses/[preview/][small/]{id}") public String handlePreview(@PathVariable long id, @PathVariable("preview/") boolean preview, @PathVariable("small/") boolean small) { return "view"; } 

我知道我可以实现一些请求映射来实现相同的效果:

 @RequestMapping(value="/houses/preview/{id}") ... @RequestMapping(value="/houses/{id}") ... ~~~ snip ~~~ 

但是根据可能的排列数量,它似乎是一个非常冗长的选择。

Spring的任何后续版本(3之后)是否提供了这样的function? 或者,是否有任何机制将请求URL的部分链接起来以提供更大的响应方法签名?

更新

有关共享路径变量和请求参数的问题的答案表明了一种方法:

 @RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"}) @ResponseBody public String getCampaignDetails( @PathVariable("id") String id) { ~~~ snip ~~~ 

但路径变量不能设置为null。 刚进入/campaigns将返回400响应。

如果您使用的是Java 1.8为什么不使用java.util.Optional 。 为了得到你的后面的例子,你可以避免400响应,并使用一个Optional而不是String代表你的eventualy路径,如下所示:

 @RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"}) @ResponseBody public String getCampaignDetails( @PathVariable("id") Optional id) { if(id.isPresent()){ model.addAttribute("id", id.get());//id.get() return your String path } }