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
相关产品推荐
相关产品推荐

