Skip to content

fastjson2_autotype_cn

温绍锦 edited this page May 4, 2022 · 14 revisions

FASTJSON 2 Autotype机制介绍

1. AutoType功能介绍

FASTJSON支持AutoType功能,这个功能在序列化的JSON字符串中带上类型信息,在反序列化时,不需要传入类型,实现自动类型识别。

2. AutoType安全机制介绍

  • 必须显示打开才能使用。和fastjson 1.x不一样,fastjson 1.x为了兼容有一个白名单,在fastjson 2中,没有任何白名单,也不包括任何Exception类的白名单,必须显示显示打开才能使用。
  • 支持配置safeMode,在safeMode打开后,显式传入AutoType参数也不起作用
  • 显式打开后,会经过内置黑名单过滤。该黑名单能拦截大部分常见风险,这个机制不能保证绝对安全,打开AutoType不应该在暴露在公网的场景下使用。

3. AutoType功能使用介绍

3.1 序列化带上类型信息

序列化是带上类型信息,需要使用JSONWriter.Feature.WriteClassName。比如:

Bean bean = ...;
String jsonString = JSON.toJSONString(bean, JSONWriter.Feature.WriteClassName);

很多时候,root对象是可以知道类型的,里面的对象字段是基类或者不确定类型,这个时候不输出root对象的类型信息,可以减少序列化结果的大小,也能提升反序列化的性能。

Bean bean = ...;
String jsonString = JSON.toJSONString(bean, JSONWriter.Feature.WriteClassName, JSONWriter.Feature.NotWriteRootClassName);

3.2 反序列化打开AutoType功能支持自动类型

Bean bean = (Bean) JSON.parseObject(jsonString, Object.class, JSONReader.Feature.SupportAutoType);pa
Clone this wiki locally