![](/img/trans.png)
[英]Optional path variables in Spring-MVC RequestMapping URITemplate
[英]Optional path segments in 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之后)是否提供了这样的功能? 或者,是否有任何机制将请求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
。 要采用后面的示例,您可以使用Optional<String>
而不是表示您的eventualy路径的String
来避免400响应,如下所示:
@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"})
@ResponseBody
public String getCampaignDetails(
@PathVariable("id") Optional<String> id)
{
if(id.isPresent()){
model.addAttribute("id", id.get());//id.get() return your String path
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.