Spring Rest请求".123"返回406不可接受

4

我有一个Spring RestController,其中包含一个RequestMapping和一个PathVariable:

@RequestMapping(value = "/path/{someId:.+}")
public void method(@PathVariable("someId") String someId) {
   ...
}

调用此控制器时,如使用以下请求,会出现Http 406不可接受的错误:
- /path/id8327.123
- /path/id8327.txt

但不能使用以下方式:
- /path/id8327.234
- /path/id8327.bbb

这不是很奇怪吗? 我最近才发现 .txt 也无法正常工作,所以我猜测这与扩展映射有关。

我该如何绕过这个隐藏的功能?

此致敬礼


1
可能是[Spring MVC @PathVariable with dot (.) is getting truncated]的重复问题(https://dev59.com/O2Qo5IYBdhLWcg3wE8G2)。那个线程应该会对你有所帮助。.123和.txt是已注册的mime/content类型。其中一个答案向你展示了如何关闭它。 - Robert Moskal
2个回答

4
你可以在URL的末尾添加'/',例如:/path/id8327.123/
这种方法有助于Spring识别。

1
我在调用一个带有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查询参数传递。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接