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

Spring JAX-RS接口端点无法正常工作,出现404问题

排查JAX-RS CRUD接口404错误的实用步骤

首先,既然你的根路径http://localhost:8080/JAXRSJsonCRUDExample/能正常返回"Hello World",说明Web应用本身已经成功部署到服务器了,问题肯定出在JAX-RS的配置或者资源类的映射上。下面是几个你可以挨个排查的方向:

1. 核对JAX-RS应用的配置文件

不管你用的是Application子类还是web.xml配置,这一步是核心:

  • 如果用的是Java类配置:确认你的Application子类(比如CountryApplication)继承了javax.ws.rs.core.Application,并且在getClasses()里把你的CountryResource类加进去了,代码大概是这样:
import javax.ws.rs.core.Application;
import java.util.HashSet;
import java.util.Set;

public class CountryApplication extends Application {
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> classes = new HashSet<>();
        classes.add(CountryResource.class); // 一定要把你的资源类加进来!
        return classes;
    }
}
  • 如果用的是web.xml:检查里面的JAX-RS Servlet配置,确保servlet-class是你用的JAX-RS实现的Servlet类(比如Jersey的org.glassfish.jersey.servlet.ServletContainer),并且init-param里的包路径指向你的资源类所在的包,同时servlet-mapping的url-pattern是/rest/*(和你访问的路径对应),示例配置:
<servlet>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.yourpackage.resources</param-value> <!-- 替换成你的资源包路径 -->
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>JAX-RS Servlet</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>

2. 检查资源类的注解是否正确

别小看注解的细节,很多404都是这里出问题:

  • 你的CountryResource类上必须有@Path("/countries")注解,这样才能和/rest/countries的完整路径匹配(因为Servlet已经映射了/rest/*,所以拼接起来就是/rest + /countries)。
  • 方法上的HTTP注解(比如@GET)要确保是javax.ws.rs包下的,别不小心用了其他框架的注解。
  • 资源类和方法都得是public的,不然JAX-RS没办法识别并加载它们。

3. 确认依赖是否齐全

如果用Maven/Gradle,确保你引入了正确的JAX-RS实现依赖(比如Jersey或者RESTEasy),而且版本要和你的服务器兼容。比如Tomcat搭配Jersey的话,Maven依赖大概是这样:

<dependency>
    <groupId>org.glassfish.jersey.containers</groupId>
    <artifactId>jersey-container-servlet</artifactId>
    <version>2.35</version> <!-- 选个稳定版本 -->
</dependency>
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.35</version>
</dependency>

如果是手动加jar包,要把所有必要的jar都放到WEB-INF/lib目录下,缺一个都可能导致资源无法加载。

4. 看看服务器日志有没有线索

打开服务器的日志文件(比如Tomcat的logs/catalina.out或者localhost日志),找找有没有JAX-RS相关的报错——比如资源类加载失败、注解解析错误、依赖缺失提示等等,这些日志往往能直接告诉你问题出在哪。

5. 注意路径的大小写

URL路径是大小写敏感的!比如如果你的@Path写的是/Countries,而你访问的是/countries,那肯定会404,要确保路径完全匹配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:44:20