Java API请求返回404错误求助:Jersey项目接口无法访问
结合你提供的代码和配置,我来梳理几个最可能的问题点和对应的修复方案:
1. 资源类包路径不匹配(最常见原因)
你的web.xml中配置了Jersey要扫描的包:
<init-param> <param-name>jersey.config.server.provider.packages</param-name> <param-value>com.test.api</param-value> </init-param>
请确认你的Hello类是否真的在com.test.api这个包下。如果类的实际包名是其他(比如com.example.api),要么把类移动到com.test.api包,要么修改上述param-value的值为类所在的正确包名。Jersey只有扫描到带@Path注解的类,才能注册对应的接口路径。
2. XML声明语法错误(虽不直接导致404,但需修复避免后续问题)
你在sayHello()方法里返回的XML字符串有语法错误:
String recources="<? xml version='1.0' ?>" + "<hello>Hi, This is hello from XML</hello>";
<?和xml之间多了一个空格,这会导致返回的XML无效,应该改成:
String recources="<?xml version='1.0' ?>" + "<hello>Hi, This is hello from XML</hello>";
3. 确认Jersey依赖是否完整
检查你的项目依赖是否包含Jersey Servlet容器的核心包,如果用Maven的话,需要确保以下依赖存在:
<dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet</artifactId> <version>2.29.1</version> </dependency>
如果缺失这个依赖,Tomcat会找不到org.glassfish.jersey.servlet.ServletContainer类,导致初始化失败,最终出现404错误。
4. 验证Web应用上下文路径是否正确
确认你的项目部署到Tomcat后的上下文路径确实是JavaApp。有时候IDE部署时会自动添加版本号(比如JavaApp-1.0),你可以通过Tomcat的管理页面查看已部署应用的上下文路径,或者直接访问http://localhost:8080查看应用列表,确保访问路径中的上下文路径和实际部署的一致。
5. 检查注解导入是否正确
确保Hello类的@Path、@GET、@Produces注解都是导入的JAX-RS的标准包(Jersey 2.x基于JAX-RS 2.x):
import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType;
如果导入了其他框架的同名注解,Jersey无法识别这个资源类,也会导致404。
按照上述步骤逐一排查,应该能解决你的404问题。
内容的提问来源于stack exchange,提问作者Virender Kamboj

