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

WebClient发送XML请求报错:Content type 'application/xml' not supported for bodyType

问题分析与解决

报错Content type 'application/xml' not supported for bodyType的核心原因是注解与编解码器不匹配:

你在请求类FixmlRequest中使用的是Jackson XML专属注解(@JacksonXmlRootElement、@JacksonXmlProperty),但WebClient配置里却用了JAXB的编解码器(Jaxb2XmlEncoder/Jaxb2XmlDecoder)。JAXB只识别自身的XML注解(如@XmlRootElement),无法处理Jackson的XML注解,导致WebClient找不到能序列化你的请求对象的编码器,从而抛出媒体类型不支持的错误。

解决方案

1. 替换WebClient的XML编解码器

将JAXB相关的编解码器替换为Jackson XML的编解码器(Jackson2XmlEncoder/Jackson2XmlDecoder),适配你当前使用的注解:

修改后的WebClient配置:

@Bean
fun myWebClient(logbookHttpClient: HttpClient): WebClient = WebClient.builder()
    .codecs { configurer ->
        // 初始化Jackson XML映射器,可根据需求调整配置
        val xmlMapper = XmlMapper.builder()
            .defaultUseWrapper(false)
            .build()
        
        // 配置Jackson XML编解码器
        configurer.defaultCodecs().jackson2XmlEncoder(Jackson2XmlEncoder(xmlMapper))
        configurer.defaultCodecs().jackson2XmlDecoder(Jackson2XmlDecoder(xmlMapper))
        
        // 保留JSON编解码器(如果仍需要处理JSON请求)
        configurer.defaultCodecs().jackson2JsonDecoder(Jackson2JsonDecoder())
        configurer.defaultCodecs().jackson2JsonEncoder(Jackson2JsonEncoder())
    }
    .baseUrl(host)
    .clientConnector(ReactorClientHttpConnector(logbookHttpClient))
    .build()

2. 清理冗余配置

移除原配置中重复注册的JAXB编解码器(it.customCodecs().register(Jaxb2XmlDecoder())等),避免编解码器冲突。

3. 确认依赖有效性

你已添加的jackson-dataformat-xml依赖是正确的,无需额外引入JAXB相关依赖(除非你同时需要支持JAXB注解的XML处理)。

验证

修改配置后,重新发送请求,WebClient会使用Jackson XML编解码器处理你的FixmlRequest对象,匹配application/xml的媒体类型,即可解决报错问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 04:35:08