Spring RequestMapping:将PathVariable与不同类型区分开来

hsl*_*luo 5 java spring spring-mvc

有没有办法让Spring通过路径变量的类型将请求映射到不同的方法,如果它们在uri的同一个地方?
例如,

@RequestMapping("/path/{foo}")  

@RequestMapping("/path/{id}")
Run Code Online (Sandbox Code Playgroud)

如果foo应该是字符串,id是int,是否可以正确映射而不是查看请求URI?

Kre*_*sek 9

根据spring文档,可以将regex用于路径变量,这里是文档中的示例:

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\\d\\.\\d\\.\\d}{extension:\\.[a-z]+}")
  public void handle(@PathVariable String version, @PathVariable String extension) {
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

(例子来自http://docs.spring.io/spring/docs/3.2.x/spring-framework-reference/html/mvc.html#mvc-ann-requestmapping-patterns)

从这一点来看,应该可以根据你的情况写出这样的东西:

@RequestMapping("/path/{foo:[a-z]+}")  

@RequestMapping("/path/{id:[0-9]+}")
Run Code Online (Sandbox Code Playgroud)

  • 使用 `@RequestMapping("/path/{foo:[A-Za-z]+}")`,也可以为 String 获取 `uppercase`。 (2认同)