fastjson从1升级到2,默认配置发生变化,坑内草成原有功能异常。
fastjson2全局配置长整型Long、日期Date、字符串String等默认序列化格式。
参考配置
程序启动立即执行如下配置代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| JSON.configWriterDateFormat("millis"); JSON.configReaderDateFormat("millis"); JSON.config(JSONWriter.Feature.WriteNullNumberAsZero, // Long等Number类型值为空序列化为0 JSONWriter.Feature.WriteNullBooleanAsFalse, // Boolean类型值为空序列化为false JSONWriter.Feature.WriteLongAsString, // Long类型序列化为字符串 JSONWriter.Feature.WriteNullListAsEmpty, // List类型值为空序列化为[] JSONWriter.Feature.WriteBigDecimalAsPlain, // BigDecimal类型序列化为非科学计数法 JSONWriter.Feature.PrettyFormat, // 格式化输出 JSONWriter.Feature.WriteNullStringAsEmpty); // String类型值为空序列化为"" JSON.config(JSONReader.Feature.AllowUnQuotedFieldNames); // 字段名称支持没有双引号的反序列化 JSON.register(String.class, new ObjectWriterPrimitiveImpl<String>(){ @Override public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) { jsonWriter.writeRaw((String) object); } });
|
假设是springboot项目,那么可以使用@Configuration注解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONReader; import com.alibaba.fastjson2.JSONWriter; import com.alibaba.fastjson2.writer.ObjectWriterPrimitiveImpl; import org.springframework.context.annotation.Configuration;
import java.lang.reflect.Type;
@Configuration public class Fastjson2Config { static { JSON.configWriterDateFormat("millis"); JSON.configReaderDateFormat("millis"); JSON.config(JSONWriter.Feature.WriteNullNumberAsZero, // Long等Number类型值为空序列化为0 JSONWriter.Feature.WriteNullBooleanAsFalse, // Boolean类型值为空序列化为false JSONWriter.Feature.WriteLongAsString, // Long类型序列化为字符串 JSONWriter.Feature.WriteNullListAsEmpty, // List类型值为空序列化为[] JSONWriter.Feature.WriteBigDecimalAsPlain, // BigDecimal类型序列化为非科学计数法 JSONWriter.Feature.PrettyFormat, // 格式化输出 JSONWriter.Feature.WriteNullStringAsEmpty); // String类型值为空序列化为"" JSON.config(JSONReader.Feature.AllowUnQuotedFieldNames); // 字段名称支持没有双引号的反序列化 // 当序列化的值为字符串时直接输出字符串,而不是再加一层引号或双引号,如`JSON.toJSONString("bunny")`直接输出"bunny",而不是"\"bunny\"" JSON.register(String.class, new ObjectWriterPrimitiveImpl<String>(){ @Override public void write(JSONWriter jsonWriter, Object object, Object fieldName, Type fieldType, long features) { jsonWriter.writeRaw((String) object); } }); } }
|
实际配置
1 2 3 4 5 6 7
| @Configuration public class Fastjson2Config { static { JSON.configWriterDateFormat("millis"); } }
|
因为原有的就是13位时间戳和yyyy-MM-dd HH:mm:ss都有,只是默认写是一种格式,读取的支持多种格式。如果设置读取,支持变少,就会报错。