升级到1.3.0后,spring-boot / health端点不支持媒体类型xml

时间:2015-11-17 14:20:14

标签: xml spring-mvc spring-boot xstream spring-boot-actuator

我只是尝试将spring-boot-web应用程序(REST Web服务)升级到 spring-boot 版本 1.3.0.RELEASE 。我对/health端点使用spring-boot-actuator。使用我之前的spring-boot版本(1.2.6.RELEASE),该端点能够提供媒体类型application/xml的请求,但现在已经破坏了

请注意我使用XStream作为XML序列化程序,我通过为Spring-boot提供配置来扩展WebMvcConfigurerAdapter以配置HTTP消息的编组程序来配置它:

 @Configuration
 public class XStreamMarshallerConfiguration extends WebMvcConfigurerAdapter {

     @Autowired
     private Jackson2ObjectMapperBuilder jackson2ObjectMapperBuilder;

     @Override
     public void configureMessageConverters( final List<HttpMessageConverter<?>> converters ) {
         converters.add( createJsonConverter() ); // support JSON as default (because it is the first)
         converters.add( createXmlHttpMessageConverter() ); // support XStream XML
         super.configureMessageConverters( converters );
     }

     private MappingJackson2HttpMessageConverter createJsonConverter() {
         ObjectMapper jsonMapper = this.jackson2ObjectMapperBuilder.build();
         return new MappingJackson2HttpMessageConverter( jsonMapper );
     }

     private HttpMessageConverter<Object> createXmlHttpMessageConverter() {
         MarshallingHttpMessageConverter xmlConverter = new MarshallingHttpMessageConverter();

         XStreamMarshaller xstreamMarshaller = new XStreamMarshaller();
         configureXStream( xstreamMarshaller.getXStream() ); // my XStream setup

         xmlConverter.setMarshaller( xstreamMarshaller );
         xmlConverter.setUnmarshaller( xstreamMarshaller );

         return xmlConverter;
     }

 }

为什么/health不会使用新的spring-boot版本序列化对XML的响应?

1 个答案:

答案 0 :(得分:0)

端点只是为了产生JSON响应而设计的。 Spring Boot 1.2.x中有一个bug,这意味着如果有适当的转换器并且Accept标头要求它可以返回XML,但是存在XML格式错误的风险。

Spring Boot 1.3通过将端点限制为仅生成application/json来解决此问题,无论可用的HTTP消息转换器如何。

如果您希望Actuator正式支持XML响应,请please open an enhancement request