Spring MVC怎么返回XML数据 @RestController注解

发布时间 - 2026-01-01 00:00:00    点击率:
Spring MVC 中 @RestController 返回 XML 需添加 jackson-dataformat-xml 依赖,用 @JacksonXmlRootElement 和 @JacksonXmlProperty 标注实体类,并在控制器方法中指定 produces = MediaType.APPLICATION_XML_VALUE。

Spring MVC 中使用 @RestController 返回 XML 数据,核心在于让 Spring 能正确序列化对象为 XML,并设置响应的 Content-Type 为 application/xml。默认情况下,@RestController 依赖 Jackson(处理 JSON),要支持 XML 需额外配置和依赖。

添加 Jackson XML 序列化支持依赖

在 Maven 的 pom.xml 中引入 jackson-dataformat-xml


    com.fasterxml.jackson.dataformat
    jackson-dataformat-xml

该依赖会自动注册 XmlMapper,Spring Boot 2.2+ 会自动识别并启用 XML 消息转换器(Jackson2ObjectMapperBuilder + MappingJackson2XmlHttpMessageConverter)。

确保实体类支持 XML 序列化

用 Jackson 的注解标注 POJO,例如:

import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;

@JacksonXmlRootElement(localName = "user")
public class User {
    @JacksonXmlProperty(localName = "id")
    private Long id;
    
    @JacksonXmlProperty(localName = "name")
    private String name;
    
    // getter/setter 省略
}
  • @JacksonXmlRootElement:指定根元素名
  • @JacksonXmlProperty:控制字段对应 XML 元素名及是否作为属性(加 isAttribute = true
  • 字段需有 public getter,或开启 setVisibility 配置才能访问私有字段

控制器方法声明 Accept 和 Produces

显式指定支持 XML 响应,推荐写法:

@GetMapping(value = "/user/{id}", produces = MediaType.APPLICATION_XML_VALUE)
public User getUser(@PathVariable Long id) {
    return new User(id, "Alice");
}
  • produces = MediaType.APPLICATION_XML_VALUE 告诉 Spring 此接口只返回 XML
  • 客户端请求头带 Accept: application/xml 时才会匹配(若同时支持 JSON 和 XML,可写 produces = {MediaType.APPLICATION_XML_VALUE, MediaType.APPLICATION_JSON_VALUE}
  • 不写 produces 时,Spring 会根据请求头 Accept 自动协商,但需确保客户端明确指定

验证与调试小技巧

如果返回仍是 JSON 或报 406 Not Acceptable 错误,检查以下几点:

  • 确认依赖已生效(IDE 中查看是否引入了 jackson-dataformat-xml 及其 transitive 依赖如 woodstox-core
  • 启动日志中搜索 XmlHttpMessageConverter,看是否被注册
  • cURL 测试时带上头:curl -H "Accept: application/xml" http://localhost:8080/user/1
  • 浏览器直接访问通常发 text/html,不会触发 XML,建议用 Postman 或 curl


# html  # js  # json  # 浏览器  # app  # curl  # spring mvc  # mvc  # spring  # spring boot  # postman  # maven  # xml 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 常州企业网站制作公司,全国继续教育网怎么登录?  Python文件流缓冲机制_IO性能解析【教程】  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  如何在香港服务器上快速搭建免备案网站?  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel怎么写单元测试_PHPUnit在Laravel项目中的基础测试入门  在线教育网站制作平台,山西立德教育官网?  如何快速生成专业多端适配建站电话?  大连 网站制作,大连天途有线官网?  如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】  Laravel Telescope怎么调试_使用Laravel Telescope进行应用监控与调试  如何用y主机助手快速搭建网站?  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  详解Nginx + Tomcat 反向代理 负载均衡 集群 部署指南  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  大学网站设计制作软件有哪些,如何将网站制作成自己app?  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口  JS实现鼠标移上去显示图片或微信二维码  Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel如何处理异常和错误?(Handler示例)  Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】  如何在云虚拟主机上快速搭建个人网站?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  北京网站制作公司哪家好一点,北京租房网站有哪些?  Edge浏览器如何截图和滚动截图_微软Edge网页捕获功能使用教程【技巧】  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  JavaScript Ajax实现异步通信  韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐  Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程  如何快速生成凡客建站的专业级图册?  Laravel如何与Vue.js集成_Laravel + Vue前后端分离项目搭建指南  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何挑选高效建站主机与优质域名?  活动邀请函制作网站有哪些,活动邀请函文案?  nodejs redis 发布订阅机制封装实现方法及实例代码  为什么php本地部署后css不生效_静态资源加载失败修复技巧【技巧】  Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  如何在搬瓦工VPS快速搭建网站?  如何为不同团队 ID 动态生成多个“认领值班”按钮  如何在景安服务器上快速搭建个人网站?  Thinkphp 中 distinct 的用法解析  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  网站建设保证美观性,需要考虑的几点问题!  Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程