NGINX+Tomcat环境下升级Jersey至2.26遇HTTP 400错误的解决方法
解决Jersey 2.26升级后HTTP 400错误的踩坑经历
我最近维护一套NGINX反向代理 + Tomcat Servlet容器的服务架构时,踩了个大坑:把Jersey从2.25.1版本升级到2.26后,所有REST接口突然开始返回HTTP 400错误,一开始完全摸不着头绪,折腾了好一阵才搞定,分享给大家避坑。
问题背景
服务的前端是NGINX做流量转发,后端用Tomcat承载业务,REST接口基于Jersey实现。升级Jersey版本后,所有接口请求直接返回400 Bad Request,日志里没有明确的错误提示,排查初期毫无方向。
解决步骤
后来尝试了两个关键操作,成功解决了问题:
- 升级服务器JDK版本:把原来的
jdk1.8.0_91升级到jdk1.8.0_161 - 更新REST项目的依赖管理:确保项目内所有Jersey相关依赖统一使用2.26版本,具体的
dependencyManagement配置如下:
<dependencyManagement> <dependencies> <dependency> <groupId>org.glassfish.jersey</groupId> <artifactId>jersey-bom</artifactId> <version>${jersey.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
总结
推测是旧版本JDK(1.8.0_91)和Jersey 2.26之间存在兼容性问题,导致请求处理时出现了隐性的参数解析或协议处理异常,最终返回400状态码。升级JDK并同步依赖版本后,问题彻底消失。
内容的提问来源于stack exchange,提问作者Simon De Uvarow
相关产品推荐
相关产品推荐

