记录一下springboot2.X + FastJson
FastJson依赖的版本
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.70</version>
</dependency>
FastJson 与 Springboot 结合
众所周知,springboot默认使用的是Jackson,所以要使用FastJson,需要先移除Jackson,废话不多说,直接上代码:
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.ToStringSerializer;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import com.alibaba.fastjson.util.TypeUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.math.BigInteger;
import java.util.List;
@Configuration
public class CommonConfig implements WebMvcConfigurer {
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
// 先移除Spring默认的Jackson(这一个必须加上,这个坑了不少时间)
converters.removeIf(httpMessageConverter -> httpMessageConverter instanceof MappingJackson2HttpMessageConverter);
// 这里是一个关键性语句,加上他,会根据实体的字段名称去生成,解决了首字母大写的时候出现的一些状况
TypeUtils.compatibleWithJavaBean = true;
// 再加入FastJson
FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter();
// FastJson全局自定义配置...
FastJsonConfig config = new FastJsonConfig();
config.setSerializerFeatures(
// 是否输出值为null的字段
//SerializerFeature.WriteMapNullValue,
// 数组为null.输出[]
SerializerFeature.WriteNullListAsEmpty,
// 这里防止BigDecimal可能出现的精度丢失
SerializerFeature.WriteBigDecimalAsPlain,
// 时间格式化
SerializerFeature.WriteDateUseDateFormat,
// 防止循环引用
SerializerFeature.DisableCircularReferenceDetect);
config.setDateFormat("yyyy-MM-dd HH:mm:ss");
SerializeConfig serializeConfig = config.getSerializeConfig();
serializeConfig.put(Long.class, ToStringSerializer.instance);
serializeConfig.put(BigInteger.class, ToStringSerializer.instance);
serializeConfig.put(Long.TYPE, ToStringSerializer.instance);
fastJsonHttpMessageConverter.setFastJsonConfig(config);
converters.add(fastJsonHttpMessageConverter);
}
}
注意 : springboot2.X 版本这里一定要实现WebMvcConfigurer,别的都不好使,不要整弯路