现象
现场配置完prometheus端点后,返回数据格式乱了,如下图所示
正常结果数据如下图所示
分析
在单个微服务上访问prometheus端点数据返回格式正常。在小型化化格式返回就错乱了。数据返回格式是由消息转化统一处理的。在小型化工程中,对Long类型序列化统一进行了处理。
configureMessageConverters这个方法文档是这么写的:
配置HttpMessageConverters以用于对请求或响应的主体进行读写。如果没有添加转换器,则注册一个默认的转换器列表。
注意,向列表中添加转换器时关闭默认转换器注册。简单地添加一个转换器而不产生影响默认注册时,考虑使用extendMessageConverters方法
默认消息转化器位于org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport#addDefaultHttpMessageConverters
即使用上述方法添加HttpMessageConverter将会覆盖掉默认添加的HttpMessageConverter。所以在代码使用configureMessageConverters即只配置了json消息转化器,会对所有响应进行json序列化。
解决
将configureMessageConverters方法替换为extendMessageConverters,对消息转化进行扩展
增加以下代码:
converters.removeIf(converter -> converter instanceof MappingJackson2HttpMessageConverter);