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

Spring与Jersey构建的REST API返回404错误求助

排查Spring + Jersey REST API 404错误的实用步骤

咱们一步步来定位这个404问题,从配置到代码逐一排查:

1. 补全Jersey SpringServlet的包扫描配置

你当前的web.xml里的SpringServlet缺少了REST资源类扫描的关键配置——Jersey根本不知道要去哪里找你的UsersService。需要在servlet节点里添加初始化参数:

<servlet>
    <servlet-name>Jersey Spring Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <!-- 新增:指定REST资源所在的包 -->
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.persistent.rest</param-value>
    </init-param>
</servlet>

这个参数会告诉Jersey去扫描com.persistent.rest包下所有带@Path等Jersey注解的类。

2. 检查Spring配置文件applicationContext.xml

确保你的Spring配置开启了组件扫描,这样Spring才能识别并管理UsersService上的@Component注解:

<!-- 扫描REST服务所在的包 -->
<context:component-scan base-package="com.persistent.rest" />
<!-- 开启事务注解支持,因为你用到了@Transactional -->
<tx:annotation-driven />

如果没有这段配置,Spring不会把UsersService纳入容器,Jersey也就无法获取到这个资源实例。

3. 补全pom.xml的依赖(你的pom内容不完整)

依赖缺失或版本冲突会导致资源无法正常加载,需要确保Jersey和Spring的集成依赖完整,示例如下:

<dependencies>
    <!-- Spring核心依赖 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
    <!-- Jersey核心及Spring集成依赖 -->
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-server</artifactId>
        <version>${jersey.version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey.contribs</groupId>
        <artifactId>jersey-spring</artifactId>
        <version>${jersey.version}</version>
        <!-- 排除冲突的Spring依赖,避免版本不一致 -->
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    <!-- Hibernate相关依赖(你代码里用到了Hibernate) -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>3.6.10.Final</version> <!-- 和Spring 3.0.5版本匹配 -->
    </dependency>
</dependencies>

4. 验证请求URL与配置的匹配性

你的servlet-mapping是/FjordRestApi/*,UsersService的@Path("/us"),方法的@Path("/getUsers"),所以完整请求URL确实是http://localhost:8282/FjordRestApi/us/getUsers——但要确认Jetty确实启动在8282端口,war包也正确部署了。

5. 查看服务器启动日志

启动Jetty时,留意控制台日志,如果你看到类似下面的内容,说明Jersey成功扫描到了你的资源:

INFO: Scanning for root resource and provider classes in the packages:
  com.persistent.rest
INFO: Root resource classes found:
  class com.persistent.rest.UsersService

如果没有这些日志,说明Jersey没找到你的资源类,回到第一步重新检查配置。

6. 确认事务配置完整性

你的UsersService用了@Transactional,需要确保applicationContext.xml里配置了SessionFactory和事务管理器:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <!-- 配置数据源、Hibernate属性、实体映射等 -->
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>

虽然这部分问题通常返回500而非404,但配置错误可能导致资源初始化失败,也值得检查。

按照以上步骤逐一排查,应该能解决这个404问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:03