Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC中的可选路径段_Java_Spring_Rest_Spring Mvc - Fatal编程技术网

Java Spring MVC中的可选路径段

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

阅读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 ~~~

但是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: