2

我只是尝试将我的 spring-boot-web 应用程序(一个 REST web 服务)升级到spring-boot版本1.3.0.RELEASE。我使用 spring-boot-actuator 作为/health端点。使用我之前的 spring-boot 版本(1.2.6.RELEASE),该端点能够服务于 media type 的请求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 的响应?

4

1 回答 1

1

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

Spring Boot 1.3 通过将端点限制为仅生成application/json而不考虑可用的 HTTP 消息转换器来解决此问题。

如果您希望执行器正式支持 XML 响应,请打开增强请求

于 2015-11-17T16:27:43.917 回答