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。
我刚刚尝试将我的 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。