0

设计我的 RESTful API,我想使用以下 URI

http://[HOST]/[PLANET]/[LAT];[LONG]

例如

http://myserver/earth/50.2;29.1

Spring MVC 中这种方法的适当注释是什么?下面这个可以吗?

@RequestMapping(value = "/{planet}/{lat};{long}", method = RequestMethod.GET)
public String showInfoAboutCoords(
  @PathVariable final String planet, 
  @PathVariable final String lat,
  @PathVariable final String long, 
  final HttpServletResponse response) {
        // Implementation
}

如果这个没问题 - 有什么@MaskFormat("###-##-####")用?

4

1 回答 1

2

您的 URI 模式有两个问题:

  • 一些 servlet 容器可能会将;其视为分隔符并修剪 URI(例如 Tomcat 的错误 30535)。因此,作为一种解决方法,您可以使用一些不同的字符,例如,.
  • 默认情况下,Spring MVC 将 URI 中的点视为扩展分隔符并对其进行修剪。您可以通过为路径变量指定正则表达式模式来覆盖它。

所以,你会有类似的东西

@RequestMapping(value = "/{planet}/{lat:.*},{long:.*}", method = RequestMethod.GET) 

请注意,由于您禁用了 Spring 的扩展处理,因此如果需要,您必须手动启用它(这也需要更严格的正则表达式以避免将小数点与扩展分隔符混淆):

@RequestMapping(value = 
    {"/{planet}/{lat:.*},{long:\\d+\\.\\d+}", 
         "/{planet}/{lat:.*},{long:\\d+\\.\\d+}.*"}, 
    method = RequestMethod.GET)

@MaskFormat您可能是指来自的注释(请注意,mvc-showcase它是内置注释)。连同MaskFormatAnnotationFormatterFactory它一起演示了将路径变量(即字符串)转换为方法参数的新格式设置工具。实际上它将Strings转换为Strings,因此它仅用于验证。

于 2010-09-22T18:06:08.543 回答