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

如何在Spring WebFlux的WebClient中配置Jackson XML解析?

如何配置WebClient使用Jackson解析XML格式内容

我来帮你搞定这个问题!Spring WebFlux的WebClient和RestTemplate的消息处理机制不太一样——WebClient是通过ExchangeStrategies来管理消息编解码器的,而不是直接注册HttpMessageConverter。下面是适配你需求的具体方案:

核心思路

你之前在RestTemplate里用MappingJackson2XmlHttpMessageConverter处理XML,对应到WebClient里,我们需要用Jackson2XmlDecoder(处理响应解码)和Jackson2XmlEncoder(处理请求编码),并把它们配置到自定义的ExchangeStrategies中。

完整配置代码

首先,先创建适配XML的Jackson ObjectMapper(和你RestTemplate里的配置逻辑一致),然后构建编解码器并注入到WebClient:

import org.springframework.http.MediaType;
import org.springframework.http.codec.xml.Jackson2XmlDecoder;
import org.springframework.http.codec.xml.Jackson2XmlEncoder;
import org.springframework.web.reactive.function.client.ExchangeStrategies;
import org.springframework.web.reactive.function.client.WebClient;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
import java.util.Arrays;

// 1. 创建XML专用的ObjectMapper
Jackson2ObjectMapperBuilder xmlBuilder = Jackson2ObjectMapperBuilder.xml();
// 这里可以添加自定义配置,比如忽略未知属性、设置日期格式等
ObjectMapper xmlMapper = xmlBuilder.createXmlMapper(true).build();

// 2. 自定义ExchangeStrategies,配置XML编解码器
ExchangeStrategies xmlExchangeStrategies = ExchangeStrategies.builder()
        .codecs(codecConfigurer -> {
            // 配置响应XML解码器,兼容你之前RestTemplate里的媒体类型
            Jackson2XmlDecoder xmlDecoder = new Jackson2XmlDecoder(xmlMapper);
            xmlDecoder.setSupportedMediaTypes(Arrays.asList(
                    MediaType.APPLICATION_XML,
                    MediaType.TEXT_XML,
                    MediaType.TEXT_HTML
            ));
            codecConfigurer.defaultCodecs().jackson2XmlDecoder(xmlDecoder);

            // 如果你的POST请求需要发送XML格式内容,就配置编码器
            Jackson2XmlEncoder xmlEncoder = new Jackson2XmlEncoder(xmlMapper);
            xmlEncoder.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_XML));
            codecConfigurer.defaultCodecs().jackson2XmlEncoder(xmlEncoder);
        })
        .build();

// 3. 构建WebClient时注入自定义的ExchangeStrategies
this.webClient = WebClient.builder()
        .baseUrl("/")
        .defaultHeader(...) // 保留你原来的header配置
        .filter(logRequest()) // 保留原来的过滤器
        .filter(logResponse())
        .exchangeStrategies(xmlExchangeStrategies) // 关键:添加XML解析配置
        .build();

额外说明

  • 如果你只需要解析响应的XML,不需要发送XML请求,那可以去掉Jackson2XmlEncoder的配置部分。
  • 这个配置不会替换WebClient默认的JSON编解码器,只是新增了XML的支持;如果想让XML成为优先解析的格式,可以调整setSupportedMediaTypes里的顺序。
  • 和你之前RestTemplate的MappingJackson2XmlHttpMessageConverter一样,底层都是依赖Jackson的XML模块(jackson-dataformat-xml),确保类路径里已经包含这个依赖即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:03:40