我正在使用Spring在Java中创建一个Rest api并拥有诸如
之类的URL GET http://host:port/products/{resource}
资源的ID通常与版本号相似,例如3.2
或更详细的示例x-light.5p
。
不幸的是,Spring似乎切断了最后一部分,认为它是一个扩展(如.html
或.png
)所以实际进入我的控制器的不是3.2
而是{{1而不是3
而是x-light.5p
。我进行了一些实验,发现用一个额外的斜杠结束请求确实有效:x-light
确实完全进入控制器。
出于显而易见的原因,改变我们的身份是不行的。为什么Spring表现得这样,我可以改变它吗?如果我将控制器映射从GET http://host:port/products/x-light.5p/
更改为/products/{resource}
,会发生什么?这是一种强制执行api的人追加最后一个斜线的方法吗?我认为最后的斜线大多是多余的。
答案 0 :(得分:0)
您可以尝试在@ benji2505帖子或下面提到的解决方案。
@RequestMapping(value = "/products/**", method = RequestMethod.GET)
public void products(HttpServletRequest request, HttpServletResponse response) {
String pattern = (String)request.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);
String resource = new AntPathMatcher().extractPathWithinPattern(pattern, request.getPathInfo());
}
答案 1 :(得分:0)
像这样的用户路径映射
{资源:+}
@RequestMapping(method = RequestMethod.GET, value = "/products/{resource:.+}")
public void myMthod(@PathVariable("id") String resource) {
....
}