springboot中返回值json中null转换空字符串

在实际项目中,我们难免会遇到一些无值。当我们转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可以考虑,它也比较方便。

原文地址:https://www.cnblogs.com/long88-club/p/11361174.html

时间: 2024-10-10 10:08:57

springboot中返回值json中null转换空字符串的相关文章

在Java 线程中返回值的用法

http://icgemu.iteye.com/blog/467848 在Java 线程中返回值的用法 博客分类: Java Javathread 有时在执行线程中需要在线程中返回一个值:常规中我们会用Runnable接口和Thread类设置一个变量:在run()中改变变量的值,再用一个get方法取得该值,但是run何时完成是未知的:我们需要一定的机制来保证. 在在Java se5有个Callable接口:我们可以用该接口来完成该功能: 代码如: Java代码   package com.thr

Django与SQL语言中——NULL与空字符串的区别

SQL有指定空值的独特方式,它把空值叫做NULL. Null在数据库中表示 不知道的数据,主要有3种意思: 1)知道数据存在,但不知道具体值. 2)不知道数据是否存在. 3)数据不存在. 在SQL中, NULL的值不同于空字符串,就像Python中None不同于空字符串("")一样.这意味着某个字符型字段(如VARCHAR)的值不可能同时包含NULL和空字符串. 这会引起不必要的歧义或疑惑. 为什么这条记录有个NULL,而那条记录却有个空字符串? 它们之间有区别,还是数据输入不一致?

使用FindControl(&quot;id&quot;)查找控件 返回值都是Null的问题

做了一个通过字符串ID查找页面控件并且给页面控件赋值的功能,过程中遇到了this.FindControl("id")返回值都是Null的问题,记录一下解决办法. 问题的原因是我所要查找的ID控件的父控件不是this所造成的. 所以我写了一个递归方法获取控件: 1 /// <summary> 2 /// 获取页面中某个控件 3 /// </summary> 4 /// <param name="control">父控件容器</

Oracle中Null与空字符串&#39; &#39;的区别

含义解释: 问:什么是NULL? 答:在我们不知道具体有什么数据的时候,也即未知,可以用NULL,我们称它为空,ORACLE中,含有空值的表列长度为零. ORACLE允许任何一种数据类型的字段为空,除了以下两种情况: 1.主键字段(primary key), 2.定义时已经加了NOT NULL限制条件的字段 说明: 1.等价于没有任何值.是未知数. 2.NULL与0.空字符串.空格都不同. 3.对空值做加.减.乘.除等运算操作,结果仍为空. 4.NULL的处理使用NVL函数. 5.比较时使用关键

jquery ajax和php实现返回值 json类型

js页面 $.ajax({ type: “POST”, dataType: ‘json’, url: “add_vote.php”, data: “touid=”+uid+”&tousername=”+username, success: function(msg){ //json解析方法一 var dataObj=eval("("+msg+")");//转换为json对象 alert(dataObj.goods_list);//输出root的子对象数量 /

C语言 realloc为什么要有返回值,realloc返回值详解/(解决任意长度字符串输入问题)。

在C语言操作中会用到大量的内存操作,其中很常用的一个是realloc(). 由字面意思可以知道,该函数的作用是用于重新分配内存. 使用方式如下: NewPtr=(数据类型*)realloc(OldPtr,MemSize) 其中OldPtr指向 待重新分配内存的指针. NewPtr指向 新分配空间的指针. MemSize为 分配后的空间大小. 该函数的使用涉及以下几个问题: 1.不同情况下的返回值 2.OldPtr指向的内存会不会自动释放 3.OldPtr和NewPtr分别是什么内容,他们有什么关

C语言 realloc为什么要有返回值,realloc返回值具体解释/(解决随意长度字符串输入问题)。

在C语言操作中会用到大量的内存操作,当中非经常常使用的一个是realloc(). 由字面意思能够知道,该函数的作用是用于又一次分配内存. 使用方式例如以下: NewPtr=(数据类型*)realloc(OldPtr,MemSize) 当中OldPtr指向 待又一次分配内存的指针. NewPtr指向 新分配空间的指针. MemSize为 分配后的空间大小. 该函数的使用涉及下面几个问题: 1.不同情况下的返回值 2.OldPtr指向的内存会不会自己主动释放 3.OldPtr和NewPtr各自是什么

mysql 判断null 和 空字符串

1.在mysql中null 不能使用任何运算符与其他字段或者变量(函数.存储过程)进行运算.若使用运算数据就可能会有问题. 2.对null 的判断: 创建一个user表:id 主健 name 可以为空 select * from user; insert into user values('33',null);  ##创建一条name为空的数据 insert into user values('222','');  ##创建一条为空字符的数据 用isnull判断是否为空:只有name 为null

PHP递归方式把一个数组里面的null转换为空字符串”的方法

在一些接口的调用中,直接查询数据库出来的字段可能为null字段,但是为了简便前端的判断,需要把null转换成空字符串'',这个时候就需要递归的方式进行.直接上代码如下: //递归方式把数组或字符串 null转换为空''字符串 public function _unsetNull($arr){ if($arr !== null){ if(is_array($arr)){ if(!empty($arr)){ foreach($arr as $key => $value){ if($value ===