一:当莫个参数的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在这块灵活性更高