You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从Jersey 1.19+Spring 5迁移至Jersey 2.25+Spring 5遇404问题求助

Jersey 1.19迁移到2.25后404问题的排查方案

针对你遇到的迁移后控制台无报错但访问返回404的问题,结合Jersey 1.x到2.x的核心变更,给你整理了几个最可能的原因和排查步骤:

1. 核心Servlet类配置错误

Jersey 2.x彻底更换了Servlet容器的类路径,旧版本的com.sun.jersey.spi.container.servlet.ServletContainer已经被替换为org.glassfish.jersey.servlet.ServletContainer。你得检查web.xml里的<servlet-class>配置,如果还是沿用旧类名,请求根本不会被Jersey 2.x处理,直接返回404。

示例正确配置:

<servlet>
    <servlet-name>Jersey Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <!-- 其他初始化参数 -->
</servlet>

2. 包扫描参数键名变更

Jersey 2.x修改了包扫描的初始化参数键,旧版本的com.sun.jersey.config.property.packages要换成jersey.config.server.provider.packages。如果你的web.xml里还是用旧的参数名,Jersey无法扫描到你的资源类,自然没有可匹配的接口。

示例正确配置:

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.yourpackage.resources</param-value>
</init-param>

3. Spring集成配置不兼容

jersey-spring3和旧的jersey-spring在Spring集成逻辑上有很大差异:

  • 要确保Spring上下文正确加载Jersey的ResourceConfig子类,或者通过javax.ws.rs.Application实现类来注册资源;
  • 别再用旧的Spring相关初始化参数,比如com.sun.jersey.api.json.POJOMappingFeature这类旧参数,Jersey 2.x已经改用新的JSON配置方式;
  • 检查是否存在Spring bean和Jersey资源的初始化顺序问题,有些情况下Spring上下文加载完成但Jersey资源未被正确注册。

4. 上下文映射与路径匹配问题

检查web.xml中的<url-pattern>配置,确保请求路径能被Jersey Servlet拦截。比如如果你的应用上下文是/myapp,而Jersey的url-pattern是/api/*,那你得访问/myapp/api/xxx才能触发Jersey处理,直接访问/myapp会返回404(除非你配置了根路径的资源)。

5. 隐性依赖冲突或初始化异常

虽然控制台没有明显报错,但可能存在隐性的类加载冲突或初始化失败:

  • 去Tomcat的localhost.log或catalina.log里看看,有没有被忽略的WARN或DEBUG级别的异常;
  • 确认Maven依赖中是否彻底排除了Jersey 1.x的相关jar包,比如jersey-core、jersey-server等旧版本依赖,避免类加载混乱;
  • 验证jersey-spring3 2.25与Spring 5.0.5的兼容性,虽然官方标注兼容,但部分场景下可能需要微调依赖版本。

内容的提问来源于stack exchange,提问作者Dieguinho

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:34:06