弹簧休息请求406不适用于“.123”

时间:2017-07-19 11:27:46

标签: java spring rest url

我有一个带有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也失败了,所以我猜它与扩展映射有关。

如何解决这个隐藏的功能?

亲切的问候

2 个答案:

答案 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 查询参数传递。