fastjson icon indicating copy to clipboard operation
fastjson copied to clipboard

RestTemplate通过FastJsonHttpMessageConverter设置PropertyNamingStrategy.NoChange无效

Open pengxianggui opened this issue 2 years ago • 0 comments

【概述】:如题,我直接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,还是我使用方式不对? 感谢!

pengxianggui avatar Oct 11 '23 03:10 pengxianggui