其余 API 资源包含点,最后一部分被切断



我正在使用Spring在Java中创建一个Rest api,并且具有诸如

GET http://host:port/products/{resource}

资源的 id 通常类似于版本号(如3.2)或更详细的示例x-light.5p

不幸的是,Spring似乎切断了最后一部分,认为它是一个扩展(如.html.png),所以实际进入我的控制器的不是3.2而是3,不是x-light.5p而是x-light。我做了一些实验,注意到用额外的斜杠结束请求确实有效:GET http://host:port/products/x-light.5p/确实完全进入控制器。

出于显而易见的原因,更改我们的 ID 是不行的。为什么春天会这样,我可以改变它吗?如果我将控制器映射从/products/{resource}更改为/products/{resource}/,会发生什么情况?这是强制调用 api 的人附加最后一个斜杠的一种方式吗?我认为最后一个斜杠大部分是多余的。

这样的用户路径映射

{资源:.+}

@RequestMapping(method = RequestMethod.GET, value = "/products/{resource:.+}")
public void myMthod(@PathVariable("id") String resource) {
....
}

您可以尝试@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());
}

相关内容

最新更新