Spring MVC中通过@RestController注解返回XML数据,核心依赖HttpMessageConverter的实现类完成对象到XML格式的转换,不需要额外手动拼接XML字符串,开发效率更高。

核心依赖配置
要实现对象自动转换为XML格式返回,需要添加XML转换相关的依赖,以Maven项目为例,需要引入Jackson的XML扩展依赖:
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>2.15.2</version>
</dependency>
该依赖会自动注册MappingJackson2XmlHttpMessageConverter到Spring容器中,负责处理XML格式的请求和响应。
实体类定义
需要定义一个普通的Java实体类,用于承载要返回的数据,类上可以添加JAXB相关的注解来控制XML的生成格式:
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;
// 指定XML的根节点名称
@XmlRootElement(name = "user")
public class User {
private String name;
private Integer age;
private String email;
// 对应XML中的子节点名称
@XmlElement(name = "user_name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(name = "user_age")
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@XmlElement(name = "user_email")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
接口实现代码
使用@RestController注解定义接口类,在接口方法上通过produces属性指定返回的内容类型为XML,Spring MVC会自动选择合适的HttpMessageConverter进行转换:
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api")
public class XmlController {
@GetMapping(value = "/user/xml", produces = "application/xml;charset=UTF-8")
public User getUserXml() {
User user = new User();
user.setName("张三");
user.setAge(25);
user.setEmail("test@ipipp.com");
return user;
}
}
请求响应说明
当客户端请求/api/user/xml接口时,Spring MVC会执行以下流程:
- 匹配到对应的接口方法,执行方法获取返回的User对象
- 根据
produces指定的application/xml类型,选择MappingJackson2XmlHttpMessageConverter - 转换器将User对象按照实体类的注解规则转换为XML格式字符串
- 将XML字符串写入响应体,返回给客户端
此时的响应内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<user>
<user_name>张三</user_name>
<user_age>25</user_age>
<user_email>test@ipipp.com</user_email>
</user>
常见问题说明
返回的不是XML格式
如果出现返回JSON格式的情况,首先检查是否正确添加了Jackson XML依赖,其次确认接口方法的produces属性是否指定为application/xml,同时排查是否有其他HttpMessageConverter优先级更高导致覆盖了XML转换器的选择。
XML节点名称不符合预期
可以通过@XmlRootElement注解指定根节点名称,通过@XmlElement注解指定字段对应的子节点名称,如果需要忽略某个字段,可以添加@XmlTransient注解。
中文乱码问题
在produces属性中指定charset=UTF-8即可解决响应中文乱码的问题,不需要额外配置其他编码过滤器。
Spring_MVCRestControllerXML数据返回HttpMessageConverter修改时间:2026-06-21 14:15:30