springboot中返回值json中null转换空字符串_阿里的json转化怎么把null转为空字符串-程序员宅基地

技术标签: APP服务端  

在实际项目中,我们难免会遇到一些无值。当我们转JSON时,不希望这些null出现,比如我们期望所有的null在转JSON时都变成“”“”这种空字符串,那怎么做呢?

Jackson中对null的处理

复制代码

 1 @Configuration
 2 public class JacksonConfig {
 3     @Bean
 4     @Primary
 5     @ConditionalOnMissingBean(ObjectMapper.class)
 6     public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
 7         ObjectMapper objectMapper = builder.createXmlMapper(false).build();
 8         objectMapper.getSerializerProvider().setNullValueSerializer(new JsonSerializer<Object>() {
 9             @Override
10             public void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
11                 jsonGenerator.writeString("");
12             }
13         });
14         return objectMapper;
15     }
16 }

复制代码

 

fastjson

使用fastjson需要导入依赖(https://mvnrepository.com/search?q=fastjson)

1 <dependency>
2     <groupId>com.alibaba</groupId>
3     <artifactId>fastjson</artifactId>
4     <version>1.2.58</version>
5 </dependency>

使用fastjson时,对null的处理和Jackson有些不同,需要继承WebMvcConfigurationSupport类,然后覆盖configureMessageConverters方法。在方法中,我们可以选择要实现null转换的场景,配置好即可。

复制代码

 1 import com.alibaba.fastjson.serializer.SerializerFeature;
 2 import com.alibaba.fastjson.support.config.FastJsonConfig;
 3 import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
 4 import org.springframework.context.annotation.Configuration;
 5 import org.springframework.http.MediaType;
 6 import org.springframework.http.converter.HttpMessageConverter;
 7 import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
 8 
 9 import java.nio.charset.Charset;
10 import java.util.ArrayList;
11 import java.util.List;
12 
13 @Configuration
14 public class fastJsonConfig extends WebMvcConfigurationSupport {
15 
16     /**
17      * 使用阿里 fastjson 作为 JSON MessageConverter
18      * @param converters
19      */
20     @Override
21     public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
22         FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
23         FastJsonConfig config = new FastJsonConfig();
24         config.setSerializerFeatures(
25                 // 保留 Map 空的字段
26                 SerializerFeature.WriteMapNullValue,
27                 // 将 String 类型的 null 转成""
28                 SerializerFeature.WriteNullStringAsEmpty,
29                 // 将 Number 类型的 null 转成 0
30                 SerializerFeature.WriteNullNumberAsZero,
31                 // 将 List 类型的 null 转成 []
32                 SerializerFeature.WriteNullListAsEmpty,
33                 // 将 Boolean 类型的 null 转成 false
34                 SerializerFeature.WriteNullBooleanAsFalse,
35                 // 避免循环引用
36                 SerializerFeature.DisableCircularReferenceDetect);
37 
38         converter.setFastJsonConfig(config);
39         converter.setDefaultCharset(Charset.forName("UTF-8"));
40         List<MediaType> mediaTypeList = new ArrayList<>();
41         // 解决中文乱码问题,相当于在 Controller 上的 @RequestMapping 中加了个属性 produces = "application/json"
42         mediaTypeList.add(MediaType.APPLICATION_JSON);
43         converter.setSupportedMediaTypes(mediaTypeList);
44         converters.add(converter);
45     }
46 }

复制代码

 

Jackson VS fastjson

选项 FASTJSON 杰克逊
上手难易程度 容易 中等
高级特性支持 中等 丰富
官方文档,示例支持 中文 英文
处理JSON速度 略快

关于Jackson和fastjson的对比,网上有很多资料可以查看,大家可以根据自己实际情况选择合适的框架。从扩展上来看,fastjson没有Jackson灵活,从速度或者上手难度来看,fastjson可以考虑,它也比较方便。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/zoucui/article/details/104984220

智能推荐

JavaScript大数运算】实现高精度计算的JavaScript算法_js 用什么类型运算大数据和精度要求高的数据-程序员宅基地

文章浏览阅读104次。总结起来,JavaScript中的大数运算是一个挑战,但通过使用字符串表示大数并手动实现算术运算,或者使用专门的JavaScript库,我们可以实现高精度的数值计算。这为处理更大范围的数值提供了可能,使我们能够在JavaScript中进行各种复杂的数值计算。无论是手动实现算法还是使用现有的库,都能帮助我们在JavaScript中实现高精度计算,处理更大范围的数值。在上述代码中,我们将大数表示为字符串,逐位相加,并处理进位。这样,我们可以避免JavaScript的数值限制,从而实现了高精度的加法运算。_js 用什么类型运算大数据和精度要求高的数据

bbp公式求圆周率、python_【并行计算】六种方法计算圆周率-程序员宅基地

文章浏览阅读2.7k次。计算π的历史圆周率π可能是科学界内外最广为人知的自然常数了。早在公元5世纪时,南朝宋数学家祖冲之用割圆法将圆周率计算到小数点后7位数字。大约同一时间,印度的数学家也将圆周率计算到了小数点后5位。历史上首个π精确无穷级数公式(即莱布尼茨公式)直到约1000年后才由印度数学家发现。20世纪以来,随着计算机技术的快速发展,π的精度也在极速提高。截至2019年,π的十进制精度已高达1013位。虽然几乎所有..._chudnovsky算法

苹果快捷键怎么调出来_原来还有这么好用的CAD快捷键,文末附赠快捷键鼠标垫!留言走起...-程序员宅基地

文章浏览阅读141次。▼相信大家都看过一些大神做CAD,那个图纸真是做的又快又好看!当然大神们其实也就基础好一点,把快捷键记得过目不忘,所以接下来小编就教大家一个非常Skr的方法,保证你对这些快捷键过目不忘,文末更有免费鼠标垫领取,千万别错过哦!这个方法就是建立我们的思维导图了,文字看了可能会忘记,但是通过导图的方式,就会变成思维图形,更加符合我们大脑的思考习惯,就可以牢牢记住这些快捷键啦:▼例如我们看到下面的就是绘图..._苹果cad快捷键

MATLAB的GUI 程序设计_制作一个曲面光照效果的演示界面,如图所示,三个弹出式菜单分别用于选择曲面形式、-程序员宅基地

文章浏览阅读7.2k次,点赞7次,收藏60次。第七章 MATLAB的GUI 程序设计Chapter 8: Design of MATLAB of GUI programGUI(Graphical User Interfaces):由各种图形对象组成的用户界面,在这种用户界面下,用户的命令和对程序的控制是通过“选择”各种图形对象来实现的。目前90%以上的应用程序和软件都是在GUI下运行的。MATLAB有两种GUI用户界面控件的创建方式,基于命令行的方式用程序来制作和基于GUI的方式制作。这里主要介绍基于GUI的方式。MATLAB 的._制作一个曲面光照效果的演示界面,如图所示,三个弹出式菜单分别用于选择曲面形式、

MT7628开发环境搭建_undefined reference to `llseek-程序员宅基地

文章浏览阅读2.1k次。参考openwrt 快速入门1.环境搭建1.1Ubuntu dockerhttps://www.runoob.com/docker/ubuntu-docker-install.html​1.1.1使用官方安装脚本自动安装安装命令如下:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun​ps: 我已经放弃用deepin编译旧版openwrt ,修复了十几个bug还是有bug,无敌下载14.04版本docke_undefined reference to `llseek

13 Kubectl命令概览_kube_ps1关闭-程序员宅基地

文章浏览阅读81次。kubectx:用于切换kubernetes context kube-ps1:为命令行终端增加$PROMPT字段 kube-shell:交互式带命令提示的kubectl终端kube-shell开源项目kube-shell可以为kubectl提供自动的命令提示和补全,使用起来特别方便,推荐给大家。Kube-shell有以下特性:命令提示,给出命令的使用说明 自动补全,列出可选命令并可以通过tab键自动补全,支持模糊搜索 高亮 使用tab键可以列出可选的对象 vim模式M..._kube_ps1关闭

随便推点

Android 通过蓝牙采集音频_android 蓝牙麦克风采集mic音频 无声-程序员宅基地

文章浏览阅读8.8k次。通过蓝牙的麦克风进行录音MainActivity.javapackage com.example.bluetothrecord;import android.app.Activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.In_android 蓝牙麦克风采集mic音频 无声

Accessing static Data and Functions in Legacy C_setyearanddayofyear-程序员宅基地

文章浏览阅读1.1k次。http://www.renaissancesoftware.net/blog/archives/430http://www.renaissancesoftware.net/blog/archives/450It’s a new year; last year was a leap year; so the quadrennial reports of leap y_setyearanddayofyear

vue把字符串分割成等长的若干字符串,根据特定字符分割字符串_vue 分割字符串-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏20次。把字符串分割成等长的若干字符串,根据特定字符分割字符串_vue 分割字符串

朴素贝叶斯分类器的例子_朴素贝叶斯分类器 例子-程序员宅基地

文章浏览阅读1.1k次。一、病人分类的例子让我从一个例子开始讲起,你会看到贝叶斯分类器很好懂,一点都不难。某个医院早上收了六个门诊病人,如下表。  症状  职业   疾病  打喷嚏 护士   感冒   打喷嚏 农夫   过敏   头痛  建筑工人 脑震荡   头痛  建筑工人 感冒   打喷嚏 教师   感冒   头痛  教师   脑震荡现在又来了第七个病人,是一个打喷嚏的建筑工人。请问他患上感冒的概率有多大?根据贝叶斯..._朴素贝叶斯分类器 例子

当mysql数据库转换为sqlserver数据库时常见报错_mysql 数据导出在sqlserver不能用-程序员宅基地

文章浏览阅读527次。↵下面是我在把mysql数据库转换为sqlserver数据库时候遇到过的一些错,踩过的坑,把它总结下来防止以后再出错。报错 1:com.microsoft.sqlserver.jdbc.SQLServerException: 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'user_student'中的标识列指定显式值。出错原因:当mysql数据库转换为sqlserver数据库时,如果第一个id设置为自动递增,那么String sql = "..._mysql 数据导出在sqlserver不能用

LeetCode 刷题常用数据结构(Java 中的实现)_javalist集合map组合刷题 leetcode-程序员宅基地

文章浏览阅读1.9k次,点赞4次,收藏27次。记录常用数据结构(栈、队列、数组、列表、字符串、集合等),在 Java 中如何使用它的实现类。_javalist集合map组合刷题 leetcode

推荐文章

热门文章

相关标签