繁体   English   中英

Spring MVC:RESTful URI(包括“;”)的控制器方法的正确注释

[英]Spring MVC: Correct Annotation of Controller Method for RESTful URI including ';'

设计我的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("###-##-####")什么用?

您的URI模式有两个问题:

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

所以,你会得到类似

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

请注意,由于您禁用了Spring的扩展处理,因此您必须在需要时手动启用它(这还需要更多限制性的regexp以避免将小数点与扩展分隔符混淆):

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM