Spring MVC中的可选路径段。

14 浏览
0 Comments

Spring MVC中的可选路径段。

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

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

\n我知道我可以实现多个请求映射来达到相同的效果:\n

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

\n但是,根据可能的排列组合数量,这似乎是一种非常冗长的选项。\n在Spring(3之后)的任何较新版本中提供了这样的功能吗?或者,有没有机制将请求URL的部分链接到更大的响应方法签名中?\n更新\n与共享路径变量和请求参数相关的问题的这个答案提出了一种方法,如下所示:\n

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

\n但是路径变量不能设置为null。只访问/campaigns将返回400响应。

0
0 Comments

在Spring MVC中,有时候我们需要处理可选的路径片段。这种情况下,我们可以使用Java 8中引入的Optional类来表示这些可选路径片段。下面是一个示例代码:

@RequestMapping(method=RequestMethod.GET, value={"/campaigns","/campaigns/{id}"})
public String getCampaignDetails(@PathVariable("id") Optional id) { 
  if(id.isPresent()){
      model.addAttribute("id", id.get());//id.get()返回路径的字符串
  }
}

为什么我们要使用Optional类呢?这是因为在处理路径时,有时候某些路径片段可能是可选的。如果我们直接使用String类型来表示路径片段,那么在缺少该路径片段时,Spring MVC会返回一个400的错误响应。而使用Optional类,我们可以在缺少该路径片段时,返回一个空的Optional对象,而不会触发错误响应。

以上就是使用Optional类来处理可选路径片段的原因和解决方法。通过使用Optional类,我们可以更加灵活地处理路径,避免不必要的错误响应。

0