SpringBoot/Jackson 2.13.x如何在XML头中输出standalone="yes"?
解决Spring Boot中XML输出头添加
standalone="yes"的问题 要在XML声明里强制输出standalone="yes",你可以直接通过Woodstox的输出属性配置实现——你的代码已经在使用Woodstox的WstxOutputProperties,只需额外添加一行属性设置即可:
在mappingJackson2XmlHttpMessageConverter方法中,在设置P_USE_DOUBLE_QUOTES_IN_XML_DECL之后,添加:
xmlMapper.getFactory().getXMLOutputFactory().setProperty(WstxOutputProperties.P_OUTPUT_XML_DECL_STANDALONE, "yes");
修改后的完整配置代码
@Bean public Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder() { final AnnotationIntrospector introspector = new JaxbAnnotationIntrospector(TypeFactory.defaultInstance()); return new Jackson2ObjectMapperBuilder().serializationInclusion(JsonInclude.Include.NON_NULL).defaultUseWrapper(false) .annotationIntrospector(introspector); } @Bean @Autowired public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter(Jackson2ObjectMapperBuilder builder) { final XmlMapper xmlMapper = builder.createXmlMapper(true).build(); xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true); xmlMapper.getFactory().getXMLOutputFactory().setProperty(WstxOutputProperties.P_USE_DOUBLE_QUOTES_IN_XML_DECL, true); // 新增:设置standalone属性 xmlMapper.getFactory().getXMLOutputFactory().setProperty(WstxOutputProperties.P_OUTPUT_XML_DECL_STANDALONE, "yes"); return new MappingJackson2XmlHttpMessageConverter(xmlMapper); }
原理说明
WstxOutputProperties.P_OUTPUT_XML_DECL_STANDALONE是Woodstox提供的专属属性,用于控制XML声明中的standalone值。设置为"yes"后,生成的XML头会变为:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
内容的提问来源于stack exchange,提问作者Chris Spiking
相关产品推荐
相关产品推荐

