Jersey RESTful Web应用所有资源URI返回404问题求助
解决Jersey REST应用HTTP 404及JAXB类找不到问题
Hey there, let's break down why you're seeing that 404 error and fix it right away!
核心问题分析
从你的Tomcat日志里能抓到关键报错:
java.lang.ClassNotFoundException: javax.xml.bind.Unmarshaller
这是因为Java 9及更高版本已经把JAXB(XML绑定API)从JDK核心模块中移除了,而你使用的Jersey 2.27版本依赖JAXB类完成初始化工作。Jersey初始化失败后,根本没扫描到你的MessageResource资源类,自然所有请求都返回404。
解决方案步骤
1. 添加JAXB相关依赖(Maven项目)
在你的pom.xml里加入以下依赖,补上Jersey需要的JAXB相关类:
<dependency> <groupId>javax.xml.bind</groupId> <artifactId>jaxb-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-impl</artifactId> <version>2.3.1</version> <scope>runtime</scope> </dependency> <dependency> <groupId>com.sun.xml.bind</groupId> <artifactId>jaxb-core</artifactId> <version>2.3.0.1</version> </dependency> <dependency> <groupId>javax.activation</groupId> <artifactId>activation</artifactId> <version>1.1.1</version> </dependency>
2. 验证资源配置正确性
- 确认
MessageResource类所在的包完全匹配web.xml里的jersey.config.server.provider.packages参数值:org.manjunath.webservice.messenger。如果你的资源类在别的包下,Jersey会直接忽略它。 - 确认访问URL正确:
http://localhost:8080/messenger/webapi/messages。这里的messenger是你的Web应用上下文根(对应Tomcat部署的WAR包名称),如果你的WAR包名字不是messenger.war,需要改成对应的名称。
3. 重新部署应用
添加依赖后,执行mvn clean package重新打包WAR,然后部署到Tomcat,启动服务器后再访问资源URL,应该就能正常返回"Hello"了。
内容的提问来源于stack exchange,提问作者Manjunath H M
相关产品推荐
相关产品推荐

