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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:05:29