我只是尝试将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的响应?
答案 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。