Spring Boot MVC 文件后缀解析异常问题咨询(Boot 2.0.0版本)
Spring Boot中IP路径匹配的406错误问题解决
我之前也碰到过这个Spring Boot版本兼容的坑,给你详细拆解下:
旧版本(2.0.0之前)的可行配置
在Spring Boot 2.0.0版本之前,我们常用下面的@RequestMapping配置来接收带IP地址的请求:
@RequestMapping(method = RequestMethod.GET, value = "/{ipAddress:.+}", produces = MediaType.APPLICATION_JSON_VALUE)
这个配置里的:.+正则是关键,它能让Spring完整匹配IP地址,不会把最后一段(比如.123)当成文件名后缀截断,这种写法在很多技术文章里都被验证过有效。
2.0.0版本的特殊问题
升级到Spring Boot 2.0.0之后,大部分场景下这个配置依然能正常工作,但有个特殊情况会触发406 Not Acceptable错误:当请求的IP地址以.123结尾的时候。这是因为Spring的内容协商机制在这个场景下误把.123当成了一种媒体类型后缀,而我们的接口只返回JSON格式,导致匹配失败抛出406。
临时解决方法
我通过Spring官方文档的提示找到了临时修复方案,核心是关闭路径后缀的内容协商检测,或者调整路径匹配规则。最简单的方式是在配置类中添加如下配置:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { // 关闭路径后缀的媒体类型自动检测 configurer.favorPathExtension(false); } }
这样就能彻底避免Spring把IP的最后一段误判为媒体类型后缀,同时保证IP地址能被完整匹配。
内容的提问来源于stack exchange,提问作者Adrian Smith
相关产品推荐
相关产品推荐

