关于fastjson与jackson在反序列化bool型时的区别

一:当莫个参数的value反序列化成bool型时

jackson序列化框架的处理方式:

基于jackson 2.9.8版本的源码(NumberDeserializers._parseBoolean)

value为bool型时,正常赋值
value为null时,则为null
value为array时,报错(可配置mapper.configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true),则支持空数组为null; 可配置 mapper.configure(UNWRAP_SINGLE_VALUE_ARRAYS, true),则以数组的第一个元素判断true还是false,例如[true]["true"],若多个元素也报错)
value为数字时,0为false,其它为true(可配置mapper.configure(ALLOW_COERCION_OF_SCALARS, false),则不支持强转,都报错)
value为字符串,"true","True"为true,"false","False"为false,"null",""为null,其它报错(可配置mapper.configure(ALLOW_COERCION_OF_SCALARS, false),则不支持强转,都报错)

fastjson序列化框架的处理方式:

基于fastjson 1.2.28版本的源码(BooleanCodec.deserialze)

1、true, false,正常赋值
2、int类型,若为1,则为true,否则为false
3、number类型,若强转int为1,则为true,否则为false
4、string类型,若为空串、"null"、"NULL"则为null;若为"true","1"则为true;若为"false","0"则为false
4、其它情况抛错can not cast to boolean

两者的区别:在数字、字符串类型时处理不一样,jackson在这块灵活性更高

猜你喜欢

转载自www.cnblogs.com/dj3839/p/11325603.html