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

添加XML解析后API默认返回XML,如何保持默认JSON响应?

解决Spring Boot添加JAXB后API默认返回XML的问题

这个问题我之前也碰到过,本质是Spring Boot引入JAXB相关依赖后,内容协商(Content Negotiation)的默认行为发生了变化——原本只有Jackson负责JSON序列化,现在JAXB加入后,当请求没有明确指定Accept头时,Spring可能优先选择返回XML格式。下面给你几个不用逐个端点加produces = "application/json"的解决方案:

方案1:通过配置类全局设置默认响应类型

创建一个WebMvc配置类,重写内容协商配置,把JSON设为默认响应格式,同时保留XML的解析支持:

@Configuration
public class WebMvcContentConfig implements WebMvcConfigurer {
    @Override
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) {
        // 设置默认响应为JSON
        configurer.defaultContentType(MediaType.APPLICATION_JSON)
                // 注册JSON和XML的媒体类型映射
                .mediaType("json", MediaType.APPLICATION_JSON)
                .mediaType("xml", MediaType.APPLICATION_XML);
    }
}

这样配置后,所有未指定Accept头的请求都会默认返回JSON,而当请求明确指定Accept: application/xml时,依然可以返回XML(如果你的端点支持的话),同时完全不影响XML格式的请求体解析。

方案2:通过配置文件快速修改(推荐)

如果你用的是Spring Boot 2.x及以上版本,直接在配置文件里修改内容协商的默认值即可,无需编写配置类:

application.properties

# 设置默认响应类型为JSON
spring.mvc.contentnegotiation.default-content-type=application/json
# 注册媒体类型映射
spring.mvc.contentnegotiation.media-types.json=application/json
spring.mvc.contentnegotiation.media-types.xml=application/xml

application.yml

spring:
  mvc:
    contentnegotiation:
      default-content-type: application/json
      media-types:
        json: application/json
        xml: application/xml

问题根源说明

在你添加JAXB之前,Spring Boot的消息转换器里只有Jackson的MappingJackson2HttpMessageConverter负责处理JSON的序列化和反序列化,所以默认返回JSON。当引入JAXB相关依赖后,Spring会自动注册Jaxb2RootElementHttpMessageConverter来处理XML格式,此时内容协商机制在没有明确Accept头的情况下,会根据注册的转换器顺序或默认策略选择返回类型,导致默认返回XML。上面的配置就是强制把JSON设为默认的响应格式,同时保留XML的输入解析能力(完美匹配你解析XML存入数据库的需求)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:49:51