ObjectMapper JSON与PO转换异常

ObjectMapper 对JSON与PO转换异常


异常场景

  • 应用A通过HTTP接口调用应用B,部分用户请求接口响应正常,部分不可以

异常排查

  • 用户维度:对比两种用户数据,没有明显差别
  • 日志查询:请求正常的用户比请求异常的用户多打印了一个属性的返回值;并没有过多留意
  • 代码排查:检查应用B的代码,从上到下,没有查询到会出现过滤数据的代码;添加日志,等待发布生产再查
  • 接口响应:查询应用A调用的结果,发现返回值中的data数据为空,于是定位问题根源不在于应用B;因为A调用B的逻辑十分简单,只是将返回的JSON转换后返给前端展示,重点没有放在应用A上
  • 本地模拟:模拟A对B的接口请求,对响应值使用A中的工具类进行转换,定位问题原因在于某类客户,返回值中的某个属性List为null,导致部分用户请求不可以

异常原因

  • 应用A中的接口入参、出参均引用应用B的VO类及Param类,部分VO类中的属性添加了@JsonIgnore 注解,后期应用B的业务扩展,增加了新的属性,但属性可能为空
  • org.codehaus.jackson.map.ObjectMapper.readValue(json,class) 方法在将JSON转为Class时若某个属性为空,会出现转换异常
  • 且同时工具类在调用时使用了try/catch导致异常没有抛出,转换失败同样返回成功

异常解决

  • VO 返回值中对可能为空的属性添加@JsonIgnore注解
  • 替换 JSON 转换的工具类,改为fastJson中的JSON.parseObject

异常反思

  • 接口调用出现异常,先排查接口调用方,然后再排查接口提供方
  • 是否参数传输问题,是否接口响应处理问题
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值