在项目中发现接口返回的json数据中,值为null的字段没有返回,针对这一问题采用如下方法即可解决 新增配置如下
@Bean
@Primary
public HttpMessageConverters fastJsonHttpMessageConverters(){
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
fastJsonConfig.setSerializerFeatures(
SerializerFeature.PrettyFormat, // 格式化输出,包括缩进
SerializerFeature.WriteNullStringAsEmpty, // 防止某个String字段为null时,返回结果直接不显示该字段
SerializerFeature.WriteNullListAsEmpty, // 同上,强制返回某个为null的List字段
SerializerFeature.WriteMapNullValue, // 同上
SerializerFeature.MapSortField, // 根据字段名排序,默认为升序
SerializerFeature.DisableCircularReferenceDetect // 消除对同一对象循环引用的问题(第一次引用过某个对象后,后面在引用一次就会将引用的地址放过来)
);
fastConverter.setFastJsonConfig(fastJsonConfig);
return new HttpMessageConverters(fastConverter);
}
注:上述代码所在的类需要标注@Configuration注解 DisableCircularReferenceDetect效果展示
/**
* 消除对同一对象循环引用的测试
*/
@Test
public void testDisableCircularReferenceDetect(){
List
Object o = new Object();
list.add(o);
list.add(o);
System.out.println(list.size());// 2
System.out.println(JSONObject.toJSONString(list));//[{},{"$ref":"$[0]"}]
System.out.println(JSONObject.toJSONString(list, SerializerFeature.DisableCircularReferenceDetect));//[{},{}]
}
好文链接
发表评论