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
相关产品推荐
相关产品推荐

