fastJson配置的(FastJsonConfiguration)的作用 null装换成““ 或者是不返回null值

tech2022-10-28  99

实际开发过程中,当我们返回json数据时,如果数据为空,那么默认返回null(因为ResponseBody这个注解底层就是使用的jackson)。毕竟程序员不喜欢null这个字眼。 那么我们如何不让他返回null呢?我们可以使用fastJson解决。fastJson是阿里巴巴的开源库,被誉为史上最快的Json解析库

首先请看查询结果 因为数据库中enName的值为空,所以查询出的结果就表示为Null。 那么我们如何不返回null,而返回一个" "空的字符串呢?其实很 简单,只需要增加fastjson配置替换默认的jackson配置即可。 下面贴出代码。

/** * @Description FastJson配置类 */ @Configuration public class FastJsonConfiguration implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { /* 31 先把JackSon的消息转换器删除. 32 备注: (1)源码分析可知,返回json的过程为: 33 Controller调用结束后返回一个数据对象,for循环遍历conventers,找到支持application/json的HttpMessageConverter,然后将返回的数据序列化成json。 34 具体参考org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor的writeWithMessageConverters方法 35 (2)由于是list结构,我们添加的fastjson在最后。因此必须要将jackson的转换器删除,不然会先匹配上jackson,导致没使用fastjson 36 */ for (int i = converters.size() - 1; i >= 0; i--) { if (converters.get(i) instanceof MappingJackson2HttpMessageConverter) { converters.remove(i); } } FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures( // 防止循环引用 SerializerFeature.DisableCircularReferenceDetect, // 空集合返回[],不返回null SerializerFeature.WriteNullListAsEmpty, // 空字符串返回"",不返回null SerializerFeature.WriteNullStringAsEmpty, SerializerFeature.WriteDateUseDateFormat, SerializerFeature.WriteMapNullValue ); fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); //处理中文乱码问题 List<MediaType> fastMediaTypes = new ArrayList<>(); fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes); converters.add(fastJsonHttpMessageConverter); } }

接下类我们再次运行。会发现 这样的话,enName的值就变成了了空的字符串。而生效的代码就是这一行

// 空字符串返回"",不返回null SerializerFeature.WriteNullStringAsEmpty,

那么接下来同学还有疑问就是,我如果不想返回enName这个属性该怎么做呢?其实也很简单,我们只需要在该属性的实体类上增加一个注解即可。 图中标注黄色的部分

@JSONField(serialize = false)

再次运行 这时候就会返现返回的数据没有了enName这个属性。 这是我的数据库中的数据。

参考博客1 参考博客2 参考博客3 参考博客4

配置fastjson不生效问题 参考博客1 参考博客2

欢迎加入技术群聊

这辈子坚持与不坚持都不可怕,怕的是独自走在坚持的道路上!!!

最新回复(0)