背景

在测试中,两个项目a,b的接口参数用到了Bool类型,当传参"0",项目a通过了,项目b报错了,排查了下,项目b的那个接口,在对传参反序列化时就出现了问题,最后发现两个项目使用的序列化框架有所差异

处理逻辑

Fastjson处理逻辑

基于Fastjson 1.2.28版本的源码:

  1. Bool类型,正常赋值

  2. int类型,若为1,则为true,否则为false

  3. number类型,若强转int为1,则为true,否则为false

  4. string类型,若为空串、"null"、"NULL"则为null;若为"true","1"则为true;若为"false","0"则为false

  5. 其它情况抛错can not cast to boolean

Jackson处理逻辑

基于Jackson 2.9.8版本的源码:

  1. Bool类型,正常赋值

  2. Null类型,则为null

  3. Array类型,报错

    1. 可配置mapper.configure(ACCEPT_EMPTY_ARRAY_AS_NULL_OBJECT, true),则支持空数组为null

    2. 可配置mapper.configure(UNWRAP_SINGLE_VALUE_ARRAYS, true),则以数组的第一个元素判断true还是false,例如true,若多个元素也报错)

  1. number类型,0为false,其它为true

    1. 可配置mapper.configure(ALLOW_COERCION_OF_SCALARS, false),则不支持强转,都报错

  1. string类型,若为"true","True"则为true;若为"false","False"则为false,若为"null",""则为null,其它报错

    1. 可配置mapper.configure(ALLOW_COERCION_OF_SCALARS, false),则不支持强转,都报错

总结

有以下几点,我觉得我以后需要注意的

  1. 当使用不同序列化框架时,对于正常传参,不同框架的结果是一样的,但对于不正常传参,比如想把"0"反序列化成False,每个框架实现有所不同,要注意两个框架的实现,可以通过多测试来发现。

  2. 虽然总所周知,Fastjson处理速度优于Jackson,但是在Bool类型,Jackson支持更多可配置的反序列化方案

关于fastjson与jackson在反序列化bool型时的区别的更多相关文章

  1. JSON 解析 (三)—— FastJSON与Jackson比较

    一.方便性与性能 调用方便性而言: FastJSON提供了大量静态方法,调用简洁方便 Jackson须实例化类,调用相对繁琐,可通过封装成JSON工具类简化调用 性能而言: FastJSON反序列化的 ...

  2. 记一次FastJSON和Jackson解析json时遇到的中括号问题

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/jadyer/article/details/24395015 完整版见https://jadyer. ...

  3. bool型变量下标的时候javascript是不能允许的

    jother编码是我最开始想写的内容,原因有两点:1.原理比较简单,不需要太多关于算法的知识.2.比较有趣,是在对javascript有了很深的理解之后催生的产物.如果你只需要知道jother编码和解 ...

  4. 如果有三个Bool型变量,请写出一程序得知其中有2个以上变量的值是true

    下面这篇文章是从StackOverflow来的.LZ面试的时候遇到了一道面试题:“如果有三个Bool型变量,请写出一程序得知其中有2个以上变量的值是true”,于是LZ做了下面的这样的程序: bool ...

  5. sqlmap Bool型&延时型 检测策略分析

    目录 sqlmap Bool型&延时型 检测策略分析 0x00 预备-queryPage() 0x01 bool型检测策略 判断依据 quick_ratio() 案例 0x02 延时型 判断依 ...

  6. Fastjson 1.2.22-24 反序列化漏洞分析

    目录 0x00 废话 0x01 简单介绍 FastJson的简单使用 0x02 原理分析 分析POC 调试分析 0x03 复现过程 0x04 参考文章 0x00 废话 balabala 开始 0x01 ...

  7. 【Json】fastjson与jackson常用操作记录

    本文只是记录fastjson.jackson一些常用的操作方法,没作比较,网上写比较的文章很多啦. 1.对象转Json串 // fastjson String objStr = JSON.toJSON ...

  8. fastjson =< 1.2.47 反序列化漏洞复现

    fastjson =< 1.2.47 反序列化漏洞复现 HW期间爆出来一个在hw期间使用的fastjson 漏洞,该漏洞无需开启autoType即可利用成功,建议使用fastjson的用户尽快升 ...

  9. fastJson与jackson性能对比

    转载:https://blog.csdn.net/u013433821/article/details/82905222最近项目用到fastJson和jackson,为了决定到底弃用哪个,随手写了个测 ...

随机推荐

  1. 一次修复linux的efi引导的集中方法总结记录

    本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/grub_uefi_repair 起因:EFI分区被删除导致引导问 ...

  2. Markdown 打出上下标

    1. 打上标,下标 2<sup>10</sup> <!--下标--> 2.同时打上下标 $x^p_ {ij}$ <!--上标为p,下标为ij,{}是用来组合i ...

  3. rancher2.x的安装

    docker run -d --restart=unless-stopped \-p 80:80 -p 443:443 \-v  /var/lib/rancher:/var/lib/rancher/ ...

  4. Python实例100个(基于最新Python3.7版本)

    Python3 100例 原题地址:   http://www.runoob.com/python/python-100-examples.html    git地址:    https://gith ...

  5. SnowFlake分布式ID生成及反解析

    概述 分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种,SnowFlake算法生成id的结果是一个64bit大小的整数,它的结构如下图: 1位,不用.二进制中最高位为 ...

  6. Mysql的utf8与utf8mb4区别,utf8mb4_bin、utf8mb4_general_ci、utf8mb4_unicode_ci区别

    UTF-8是使用1~4个字节,一种变长的编码格式,字符编码.mb4即 most bytes 4,使用4个字节来表示完整的UTF-8. mysql的 utf8 编码最大字符长度为 3 字节,如果遇到 4 ...

  7. Activiti6 应用安装 activiti-admin,activiti-app,activiti-rest

    activiti6安装包中 1/直接将三个war包放入tomcat中,即可运行,使用H2内存数据库 2/使用mysql数据库运行 2.1/activiti-admin # security confi ...

  8. js scheme 打开手机app的方法

    1.iframe function schemeUrl(url,callbak){ var ifr = document.createElement("iframe"); ifr. ...

  9. 安装 gearman

    准备:php 对应gearman插件包 https://pecl.php.net/package/gearman 1. 先安装依赖库 [root@VM_27_0_centos /]# yum inst ...

  10. SpringBoot2+Druid+MyBatis+MySql实现增删改查

    1.配置pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&qu ...