Java Spring MVC中的可选路径段
阅读2010年的(Spring 3)文章,它讨论了使用扩展来提供一种方便的方式来包括可选路径段:Java Spring MVC中的可选路径段,java,spring,rest,spring-mvc,Java,Spring,Rest,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("/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 ~~~
但是path变量不能设置为null。只要转到
/magnities
将返回400响应。如果您使用的是Java1.8
,为什么不使用java.util.Optional
。以后面的示例为例,您可以使用一个表示最终路径的Optional
而不是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
}
}
@RequestMapping(method=RequestMethod.GET,value={/campaiments',“/campaiments/{id}”)
@应答器
公共字符串获取活动详细信息(
@路径变量(“id”)可选id)
{
if(id.isPresent()){
model.addAttribute(“id”,id.get());//id.get()返回字符串路径
}
}
你想接近吗,Javi的答案有多个请求值-值={/magnities“,“/magnities/{id}}
非常接近,但我想在URL中映射固定段。这个问题已经在一个论坛上讨论过了,这里也有同样的问题:是的,这是我在我的问题中链接到的文章。。。因此,我要求其他选择如果所有其他操作都失败,您可以使用如下过滤器重写URL: