Jersey返回XML报错:MessageBodyWriter not found for application/xml
解决Jersey项目中
MessageBodyWriter not found for media type=application/xml错误 问题原因
该错误是因为Jersey缺少处理XML序列化的核心桥接组件。虽然你已引入JAXB的API和运行时依赖,但Jersey需要专门模块来衔接JAXB与自身的消息体处理机制,同时你的依赖中存在重复的JAXB实现,可能引发版本冲突。
解决方案
1. 清理重复的JAXB依赖
你的pom.xml中同时引入了org.glassfish.jaxb:jaxb-runtime和com.sun.xml.bind:jaxb-impl,二者属于同一JAXB实现的不同groupId版本,保留一个即可,建议删除com.sun.xml.bind:jaxb-impl依赖。
2. 添加Jersey XML媒体支持依赖
引入jersey-media-jaxb模块,这是Jersey官方提供的XML处理扩展,负责将带JAXB注解的实体类序列化为XML响应。
3. 统一Jersey依赖版本
确保所有Jersey相关依赖使用相同版本,避免版本不兼容问题。可通过properties节点统一管理版本。
修改后的完整pom.xml依赖示例
<properties> <jersey.version>3.1.2</jersey.version> <!-- 统一Jersey版本 --> </properties> <dependencies> <dependency> <groupId>org.glassfish.jersey.containers</groupId> <artifactId>jersey-container-servlet-core</artifactId> <version>${jersey.version}</version> </dependency> <dependency> <groupId>org.glassfish.jersey.inject</groupId> <artifactId>jersey-hk2</artifactId> <version>${jersey.version}</version> </dependency> <!-- JSON支持(按需保留) --> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-binding</artifactId> <version>${jersey.version}</version> </dependency> <!-- Jersey XML媒体核心支持 --> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-jaxb</artifactId> <version>${jersey.version}</version> </dependency> <!-- JAXB基础依赖 --> <dependency> <groupId>jakarta.xml.bind</groupId> <artifactId>jakarta.xml.bind-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.glassfish.jaxb</groupId> <artifactId>jaxb-runtime</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>jakarta.activation</groupId> <artifactId>jakarta.activation-api</artifactId> <version>2.1.0</version> </dependency> </dependencies>
验证操作
- 执行
mvn clean install清理并重新构建项目 - 重启服务器后访问
/alien接口,此时应能正常返回XML格式的Alien数据
内容的提问来源于stack exchange,提问作者Ritesh Parwal
相关产品推荐
相关产品推荐

