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

spring-boot /health endpoint not supporting media type xml after upgrade to 1.3.0

我刚刚尝试将我的 spring-boot-web 应用程序(REST 网络服务)升级到 spring-boot 版本 1.3.0.RELEASE。我使用 spring-boot-actuator 作为 /health 端点。使用我之前的 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 的响应序列化吗?

端点仅设计用于产生 JSON 响应。 Spring Boot 1 中有一个 bug。2.x 这意味着它可以 return XML 如果有合适的转换器可用并且接受 header要求它,但存在 XML 格式错误的风险。

Spring Boot 1.3 通过限制端点只生成 application/json 而不管可用的 HTTP 消息转换器来解决这个问题。

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