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

使用Jersey开发RESTful WebService时遭遇404错误求助

排查RESTful WebService 404错误的实用步骤

兄弟,我之前也踩过REST服务404的大坑,太懂这种花几小时排查却毫无进展的挫败感了!结合你说的Tomcat能正常显示index、但访问http://localhost:8080/RestWs/rest/hello报404的情况,咱们一步步来定位问题:

1. 补全并检查web.xml核心配置

你贴的web.xml内容截断了,这部分是关键!重点确认以下几点:

  • REST Servlet是否正确声明:如果用Jersey,要确保配置了ServletContainer;如果是Spring MVC,要配置DispatcherServlet。
  • Servlet映射路径是否匹配:你的请求路径是/rest/hello,所以Servlet的url-pattern必须是/rest/*,不能写错。
  • 包扫描路径是否正确:Jersey需要在<init-param>里指定jersey.config.server.provider.packages,值是你的REST资源类所在包;Spring MVC则需要<context:component-scan base-package="xxx"/>扫描带注解的类。

给你一个Jersey的标准web.xml示例参考:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">

    <servlet>
        <servlet-name>Jersey REST Service</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <!-- 替换成你的REST类所在包 -->
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>com.yourproject.rest</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Jersey REST Service</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>
</web-app>

2. 检查REST资源类的注解

你的hello接口对应的资源类,必须满足这些条件:

  • 类上要有@Path("/hello")注解(和请求路径的hello对应);
  • 如果是Jersey,类要在web.xml指定的扫描包下;如果是Spring MVC,类上要加@RestController或者@Controller + @ResponseBody;
  • 方法上必须有HTTP方法注解,比如@GET,否则无法匹配请求。

示例资源类(Jersey版本):

package com.yourproject.rest;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/hello")
public class HelloResource {

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getHello() {
        return "Hello from REST Service!";
    }
}

3. 确认项目部署的上下文路径

Tomcat里你的项目上下文路径是不是RestWs?可以通过这两种方式确认:

  • 去Tomcat的webapps目录看,有没有RestWs文件夹,或者你的war包是不是叫RestWs.war(Tomcat默认用war包名作为上下文路径);
  • 看Tomcat启动日志,找类似Deploying web application directory [xxx/webapps/RestWs]的行,确认上下文路径没错。有时候IDE部署会自动修改上下文路径,比如IDEA可能会加项目名后缀,这点要注意。

4. 检查依赖是否完整且无冲突

  • 如果用Jersey,必须引入jersey-server、jersey-servlet核心依赖,版本要统一;
  • 如果用Spring MVC,要确保spring-webmvc依赖存在,且和Spring其他组件版本一致,避免依赖冲突导致初始化失败。

5. 查看Tomcat日志找隐藏错误

很多时候404并不是路径错了,而是REST服务在启动时就初始化失败了!去Tomcat的logs/catalina.out或者localhost.log里找报错信息,比如类找不到、注解扫描失败、Servlet初始化异常这些,这些隐藏错误才是导致404的真正原因。

如果按照以上步骤排查后还是解决不了,建议把完整的web.xml代码、REST资源类代码,以及Tomcat的启动日志贴出来,这样能更精准地定位问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:58:54