java - Spring MVC 中的可选路径段

标签 java spring rest spring-mvc

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

相关文章:

java - Spring Boot 管理服务器 : App Specific Email Notification

java - 如何获知网络状态变化?

java - Rectangle2D.contains() 无法正确检测边界中的坐标

java - java随机字符

java - 没有得到西类牙字符 (ú, í) 但在 UI 上得到像 (ó, Ã)

java - 当登录失败时,在 spring 中保留用户名

java - @RolesAllowed 无法通过 Jersey 解决

java - GSON 对象 (RESTful api)

http - 在开发 Web 应用程序时,您实际使用哪些 HTTP 状态代码?

JavaFX 通过透明节点将鼠标事件传递给子节点