Fastjson是阿里巴巴的开源JSON解析库,那么 jackson 和 fastJson 有哪些区别呢?根据网上公开的资料比较得到下表。

如果想让SpringBoot默认使用FastJson,我们首先添加fastjson依赖:
<properties>
<!--fastjson 1.2.68以下版本存在反序列化远程命令执行漏洞-->
<fastjson.version>1.2.68</fastjson.version>
</properties>
<dependencies>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
</dependencies>
在config包下,添加配置类。
package com.oracle.config;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.boot.autoconfigure.http.HttpMessageConverters;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
/**
* 设置config类 使用 @Bean注入 fastJsonHttpMessageConvert
*/
@Configuration
public class MassageConverConfiguration {
@Bean
public HttpMessageConverters fastJsonHttpMessageConverters() {
// 1、需要先定义一个 convert 转换消息的对象;
FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();
// 2、添加fastJson 的配置信息,比如:是否要格式化返回的json数据;
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat);
//防止中文乱码问题
List<MediaType> supportedMediaTypes=new ArrayList<MediaType>();
supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastConverter.setSupportedMediaTypes(supportedMediaTypes);
// 3、在convert中添加配置信息.
fastConverter.setFastJsonConfig(fastJsonConfig);
HttpMessageConverter<?> converter = fastConverter;
return new HttpMessageConverters(converter);
}
}
测试Controller返回json.
//测试返回map
@RequestMapping("map")
public Map<String,Object> returnMap(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("data",new Users(100,"zhangsan","123456"));
map.put("msg","作者信息");
map.put("code",200);
return map;
}
返回结果如下:

测试属性值为null的情况。
//测试返回map
@RequestMapping("map")
public Map<String,Object> returnMap(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("data",null);
map.put("msg","作者信息");
map.put("code",200);
return map;
}
返回结果如下:

可以发现使用fastJson时,对null的处理和jackson有些不同。
总结: 不论是FastJson还是Jackson,我们在开发中,一般都会将FastJson/Jackson进行封装成工具类JSONUtil使用。