春季MVC:正确的retful uri控制器方法的注释,包括';'
-
04-10-2019 - |
题
设计我的安息API,我想使用uli之后
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
它演示了将路径变量(IE字符串)转换为方法参数的新格式面式。实际上是转换的 String
S到 String
S,因此仅用于验证。
不隶属于 StackOverflow