阅读 this (Spring 3) 2010 年的文章,它讨论了使用扩展来提供一种包含可选路径段的便捷方式:
@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 的各个部分以提供更大的响应方法签名?
更新
This answer对于与共享路径变量和请求参数相关的问题,建议采用如下方法:
@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"})
@ResponseBody
public String getCampaignDetails(
@PathVariable("id") String id)
{
~~~ snip ~~~
但是路径变量不能设置为空。只需转到 /campaigns
就会返回 400 响应。
最佳答案
为什么不使用 java.util.Optional
如果您使用 Java 1.8
.以你后面的例子为例,你可以通过 put a Optional<String>
来避免 400 响应。而不是 String
代表你最终的路径是这样的:
@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
}
}
关于java - Spring MVC 中的可选路径段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25784050/