我有一个带有RequestMapping和PathVariable的Spring RestController:
@RequestMapping(value = "/path/{someId:.+}")
public void method(@PathVariable("someId") String someId) {
...
}
调用此控制器时,我收到Http 406 Not Acceptable错误,其中包含以下请求:
- /path/id8327.123
- /path/id8327.txt
但不是:
- /path/id8327.234
- /path/id8327.bbb
这不奇怪吗?
直到最近我才发现.txt
也失败了,所以我猜它与扩展映射有关。
如何解决这个隐藏的功能?
亲切的问候
答案 0 :(得分:2)
您可以在URL的末尾添加一个'/'
,例如:/path/id8327.123/
。
此方法可以帮助Spring识别。
答案 1 :(得分:0)
我在调用末尾具有 IP @PathVariable 的端点时遇到了这个问题。
显然,有一个较旧的 MediaType:application/vnd.lotus-1-2-3。
Spring 尝试确定要返回的 MediaType 应该是什么,它首先通过在 URL 中查找可能的 MediaType 扩展来完成此操作。
在这种情况下,它会在最后一个 '.' 之后找到作为字符串的扩展名。 对于“123”情况,Spring 认为 MediaType 应该是 MediaType 映射键“123”的值,即“application/vnd.lotus-1-2-3”。
简单的解决方法是将@PathVariable 更改为@RequestParam 并将该值作为 URL 查询参数传递。