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

SpringBoot 配置XML注解后接口仍无法返回XML格式结果问题求助

解决方案

  1. 补全XML序列化依赖
    你当前pom仅引入了JAXB的API包,缺失实际的序列化实现类,优先推荐Spring生态适配更好的Jackson XML序列化方案,和现有JSON序列化逻辑完全兼容:
    在pom.xml中添加如下依赖:
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

如果要沿用现有JAXB注解的原生实现,可补全JAXB完整依赖:

<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-core</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
  1. 完善内容协商配置
    在application.properties中添加XML媒体类型映射,确保Spring能识别.xml后缀对应的返回格式:
spring.mvc.contentnegotiation.media-types.xml=application/xml
  1. 调整Controller接口配置
    在对应查询接口的注解中添加produces属性,声明支持XML格式返回:
import org.springframework.http.MediaType;

@GetMapping(value = "/owner/{id}", produces = {MediaType.APPLICATION_JSON_VALUE, MediaType.APPLICATION_XML_VALUE})
public Owner getOwner(@PathVariable Long id) {
    // 原有业务逻辑
}
  1. 规范测试方式
    Chrome浏览器默认请求头优先返回JSON格式,直接访问默认返回JSON属于正常现象,要触发XML返回可使用两种方式:
  • 路径后缀测试:在原有接口地址后加.xml后缀,例如原地址是http://localhost:8080/owner/1,测试时访问http://localhost:8080/owner/1.xml
  • 请求头测试:调用接口时在请求头中添加Accept: application/xml

补充小优化:Owner类的id属性是Long包装类型,对应的setId方法参数是long基本类型,建议统一为Long类型,避免序列化时出现类型兼容问题。

内容的提问来源于stack exchange,提问作者devxpe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:36:01