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

Spring Boot添加jackson-dataformat-xml后JSON解析为XML报错

问题原因及解决办法

核心原因

当你添加com.fasterxml.jackson.dataformat:jackson-dataformat-xml依赖后,Spring Boot会自动注册MappingJackson2XmlHttpMessageConverter作为请求消息转换器。默认情况下,这个XML转换器的优先级高于处理JSON的MappingJackson2HttpMessageConverter。即使你请求头设置了Content-Type: application/json,Spring的请求处理链会优先用XML转换器尝试解析请求体,自然就会出现"期望'<', 却遇到'{' "的解析错误。

另外,如果你控制器的POST映射仅声明支持JSON和XML类型(比如consumes = {"application/json", "application/xml"}),但未明确约束请求头的匹配逻辑,结合转换器优先级问题,就会触发错误的解析逻辑。

可行解决方案

1. 调整消息转换器优先级,确保JSON转换器先执行

创建配置类,手动注册JSON转换器并设置最高优先级:

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.List;

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        // 优先添加JSON转换器,确保优先级最高
        converters.add(0, new MappingJackson2HttpMessageConverter());
        // 保留XML转换器(若需要XML支持)
        converters.add(new MappingJackson2XmlHttpMessageConverter());
    }
}

2. 显式约束控制器接口的媒体类型匹配

在POST映射上,通过consumes属性明确指定媒体类型顺序,让Spring优先匹配JSON:

@PostMapping(value = "/your-endpoint", consumes = {"application/json", "application/xml"})
public ResponseEntity<?> yourMethod(@RequestBody YourDto dto) {
    // 业务逻辑实现
}

注意这里的顺序:application/json放在前面,Spring会优先调用对应的JSON转换器处理请求。

3. 禁用XML转换器自动配置(若不需要XML支持)

如果只是误加了XML依赖,完全不需要处理XML请求,可以在配置文件中禁用相关自动配置:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.http.HttpMessageConvertersAutoConfiguration

这种方式仅适合确定不需要XML功能的场景,否则不推荐使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:46:01