fastjson
fastjson copied to clipboard
RestTemplate通过FastJsonHttpMessageConverter设置PropertyNamingStrategy.NoChange无效
【概述】:如题,我直接new RestTemplate()使用,用来发起http rest调用。通过FastJsonHttpMessageConverter配置了PropertyNamingStrategy.NoChange,控制接口参数保持属性名(我属性全是大写,我希望序列化以后也保持大写),反序列化也一样。但是发现不生效,序列化后,属性名首字母小写了。 【fastjson版本】: 1.2.83 【java版本】: 8 【spring-web版本】: 5.1.4 【复现代码】:
RestTemplate restTemplate = new RestTemplate();
List<HttpMessageConverter<?>> messageConverters = restTemplate.getMessageConverters();
Iterator<HttpMessageConverter<?>> iterator = restTemplate.getMessageConverters().iterator();
while (iterator.hasNext()) {
HttpMessageConverter converter = iterator.next();
if (converter instanceof MappingJackson2HttpMessageConverter) {
iterator.remove();
}
}
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.WriteMapNullValue,
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteNullListAsEmpty,
SerializerFeature.WriteNullNumberAsZero,
SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteBigDecimalAsPlain);
// 字段名维持原样(字段名都是大写)
SerializeConfig serializeConfig = new SerializeConfig();
serializeConfig.propertyNamingStrategy = PropertyNamingStrategy.NoChange;
fastJsonConfig.setSerializeConfig(serializeConfig);
// 字段名维持原样(字段名都是大写)
ParserConfig parserConfig = new ParserConfig();
parserConfig.propertyNamingStrategy = PropertyNamingStrategy.NoChange;
fastJsonConfig.setParserConfig(parserConfig);
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
messageConverters.add(0, fastJsonHttpMessageConverter);
// 然后通过restTemplate去发起调用....
【结果】: 上述代码中,配置的两个PropertyNamingStrategy.NoChange均不生效。因为我的类属性都是大写的,比如"ABCD", 最后变成了首字母小写(aBCD)。 但是配置的SerializerFeature 是生效的,比如WriteNullStringAsEmpty就生效了,null值变成了空串。
请问这是1.2.83里的bug,还是我使用方式不对? 感谢!