fastJson是阿里巴巴旗下的一个开源项目之一,它是专门用来做快速操作Json的序列化与反序列化的组件。它是目前json解析最快的开源组件,在这之前jaskJson是命名为快速操作json的工具,而当阿里巴巴的fastJson诞生后jaskjson就消声匿迹了,不过目前很多项目还在使用。
将fastJson加入到SpringBoot2.X项目内,配置json返回视图使用fastJson解析。
1、创建SpringBoot项目;
2、添加依赖:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
3、添加配置信息类FastJsonConfiguration:
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.Iterator;
import java.util.List;
import java.util.ArrayList;
@Configuration
public class FastJsonConfiguration implements WebMvcConfigurer {
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
Iterator<HttpMessageConverter<?>> iterator = converters.iterator();
while(iterator.hasNext()){
HttpMessageConverter<?> converter = iterator.next();
if(converter instanceof MappingJackson2HttpMessageConverter){
iterator.remove();
}
}
/*** 1.先定义一个convert转换消息的对象
* 2.添加fastjson的配置信息,比如:是否要格式化返回的json数据
* 3.在convert中添加配置信息
* 4.将convert添加到converters当中
*///1.先定义一个convert转换消息的对象
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
//2.添加fastjson的配置信息,比如:是否要格式化返回的json数据
FastJsonConfig fastJsonConfig = new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(
//防止循环引用
SerializerFeature.DisableCircularReferenceDetect,
//空集合返回[],不返回null
SerializerFeature.WriteNullListAsEmpty, /
/空字符串返回"",不返回null
SerializerFeature.WriteNullStringAsEmpty,
SerializerFeature.WriteMapNullValue,
SerializerFeature.PrettyFormat );
//处理中文乱码问题
List<MediaType> fastMediaTypes = new ArrayList<MediaType>();
fastMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
fastJsonHttpMessageConverter.setSupportedMediaTypes(fastMediaTypes);
//3.在convert中添加配置信息
fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig);
converters.add(fastJsonHttpMessageConverter);
}
}
FastJson SerializerFeatures
DisableCircularReferenceDetect:消除对同一对象循环引用的问题,默认为false(如果不配置有可能会进入死循环)WriteNullListAsEmpty :List字段如果为null,输出为[],而非nullWriteNullStringAsEmpty: 字符类型字段如果为null,输出为"",而非null
PrettyFormat:结果是否格式化,默认为falseWriteMapNullValue:是否输出值为null的字段,默认为false
4、测试结果: