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

Spring Boot WebFlux响应式REST服务如何设置XML格式化输出

Spring Boot WebFlux 格式化输出XML的解决方案

方案1:自定义Jaxb2XmlEncoder(适配原生JAXB封送)

WebFlux默认使用Jaxb2XmlEncoder处理XML响应的序列化逻辑,手动构造该编码器并传入JAXB格式化属性,替换默认编码器即可生效:

  • 编写配置类实现WebFluxConfigurer接口,重写configureHttpMessageCodecs方法
  • 构造Jaxb2XmlEncoder时通过setMarshallerProperties传入JAXB_FORMATTED_OUTPUT配置
import org.springframework.context.annotation.Configuration;
import org.springframework.http.codec.ServerCodecConfigurer;
import org.springframework.http.codec.xml.Jaxb2XmlEncoder;
import org.springframework.web.reactive.config.WebFluxConfigurer;
import jakarta.xml.bind.Marshaller;
import java.util.Collections;

@Configuration
public class WebXmlConfig implements WebFluxConfigurer {
    @Override
    public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
        Jaxb2XmlEncoder xmlFormatterEncoder = new Jaxb2XmlEncoder();
        xmlFormatterEncoder.setMarshallerProperties(
            Collections.singletonMap(Marshaller.JAXB_FORMATTED_OUTPUT, true)
        );
        // 替换默认XML编码器
        configurer.defaultCodecs().jaxb2XmlEncoder(xmlFormatterEncoder);
    }
}

方案2:CodecCustomizer全局注入配置(无侵入轻量方案)

不需要全量重写WebFlux配置的场景下,直接注册CodecCustomizer Bean即可实现配置注入:

import org.springframework.boot.web.codec.CodecCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.codec.xml.Jaxb2XmlEncoder;
import jakarta.xml.bind.Marshaller;
import java.util.Collections;

@Configuration
public class XmlFormatConfig {
    @Bean
    public CodecCustomizer xmlFormatCustomizer() {
        return configurer -> configurer.defaultCodecs().customizeDefaultCodecs(codec -> {
            if (codec instanceof Jaxb2XmlEncoder xmlEncoder) {
                xmlEncoder.setMarshallerProperties(
                    Collections.singletonMap(Marshaller.JAXB_FORMATTED_OUTPUT, true)
                );
            }
        });
    }
}

方案3:Jackson XML序列化场景配置

如果你的项目使用jackson-dataformat-xml而非原生JAXB做XML序列化,直接在application配置文件中添加如下配置即可:

spring:
  jackson:
    serialization:
      indent_output: true

注意:格式化输出会增加响应报文体积,生产环境建议关闭该配置


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:06:04