问题:
由于
fastjson
配置了命名规则,导致/actuator/metrics
接口和接口返回的数据,键值转换为下划线格式,进而导致前端页面无法正确解析.
解决思路
思路一:
修改
spring boot admin
源码,将前端解析的字段修改为下划线格式(ps:我没试过,感兴趣的同学可以试试,以前解决`swagger-ui`类似问题的时候我这么处理过
).
思路二:
通过修改fastjson配置,将
/actuator/metrics
和/actuator/env
接口返回的数据配置为序列化时不进行命名格式的转换.废话不多少先上代码
原配置
@Bean
public FastJsonHttpMessageConverter getFastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON);
fastMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
fastMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
fastMediaTypes.add(MediaType.TEXT_HTML);
fastConverter.setSupportedMediaTypes(fastMediaTypes);
FastJsonConfig fastJsonConfig = geFastJsonConfig();
fastConverter.setFastJsonConfig(fastJsonConfig);
return fastConverter;
}
@Bean
public FastJsonConfig geFastJsonConfig() {
FastJsonConfig fastJsonConfig = new FastJsonConfig();
SerializeConfig serializeConfig = new SerializeConfig();
serializeConfig.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
fastJsonConfig.setSerializeConfig(serializeConfig);
fastJsonConfig.setDateFormat(JSON.DEFFAULT_DATE_FORMAT);
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
return fastJsonConfig;
}
复制代码
修改后的配置
@Bean
public FastJsonHttpMessageConverter getFastJsonHttpMessageConverter() {
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
List<MediaType> fastMediaTypes = new ArrayList<>();
fastMediaTypes.add(MediaType.APPLICATION_JSON);
fastMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
fastMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
fastMediaTypes.add(MediaType.TEXT_HTML);
fastMediaTypes.add(new MediaType("application", "vnd.spring-boot.actuator.v2+json"));
fastConverter.setSupportedMediaTypes(fastMediaTypes);
FastJsonConfig fastJsonConfig = geFastJsonConfig();
fastConverter.setFastJsonConfig(fastJsonConfig);
return fastConverter;
}
@Bean
public FastJsonConfig geFastJsonConfig() {
FastJsonConfig fastJsonConfig = new FastJsonConfig();
SerializeConfig serializeConfig = new SerializeConfig();
NameFilter nameFilter = (object, name, value) -> name;
serializeConfig.addFilter(UiConfiguration.class, nameFilter);
serializeConfig.addFilter(SwaggerResource.class, nameFilter);
serializeConfig.addFilter(MetricsEndpoint.MetricResponse.class, nameFilter);
serializeConfig.addFilter(EnvironmentEndpoint.EnvironmentDescriptor.class, nameFilter);
serializeConfig.propertyNamingStrategy = PropertyNamingStrategy.SnakeCase;
fastJsonConfig.setSerializeConfig(serializeConfig);
fastJsonConfig.setDateFormat(JSON.DEFFAULT_DATE_FORMAT);
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
return fastJsonConfig;
}
复制代码
讲解
NameFilter nameFilter = (object, name, value) -> name
;表示序列化的时候将直接返回原来的键值而不做任何处理