排查问题-输出pojo日志,尽量用json

  背景: 

    下午在做一个前后端md5加密签名校验.

    前端用参数A,B,C,经过MD5加密函数,得到签名D.

    然后前端带着ABCD一块来到后端.

    同样的,后端拿到请求后,用MD5函数对ABC进行加密,得到签名E.

    然后对比D和E,如果相等,证明签名没有问题.

  问题:

    经过数次论证,在相同的条件下(相同的参数,相同的加密函数),D和E始终不相等.

    但是前端的ABC三个参数,手动使用test方法,放在后端的MD5加密工具类util里面来执行,得到签名F.

    签名F和签名D相等,但是签名D和签名E不等. 也就是前端加密和工具类加密相同,但是前端加密和后端流程性加密不同.

    这就很奇葩.有几个可能都会导致这种情况发生.

  分析:

    遇到这种情况,问题初步定为在调用函数前,对参数进行了加工. 但是经过测试,没发现有问题.

    然后再次核查前端调用逻辑,也没有问题.

    然后突然奇想,使用json对象日志来观察下. (因为这段代码的日志,一直都是xx.getParam()这种,直接输出String)

    果然,直接就找到了问题所在. 对象输出 {"data": "\"aaaaaaaaaaaa\""}

    也就是前端传参,实际上将字符串的前后都加上了双引号.

  解决:

    最后前端检查接口发现,是对字符串经过了两次转json.

  思考:

    以后输入日志参数,请尽量使用打印json,还原pojo的原貌,说不定能更快发现问题.    

 

上一篇:mybatis学习 (五) POJO的映射文件


下一篇:Mybatis 一对一 一对多 嵌套查询 嵌套结果