jackson遇到的坑

项目中,经常会遇到调用第三方接口的问题.而今天遇到的坑,就要说说这个请求了.

 

     项目中调用第三方接口,使用的是org.springframework.web.client.RestTemplate 类.传入url,方法类型,参数,返回类型,执行,返回结果,解析类型...本以为一气呵成.结果...出现了一个问题.第三方接口返回数据.属性命名是首字母大写.本以为json格式转换时对大小写不敏感.(本地拿返回示例测试多次.都没有问题.能够解析.)想来想去就是不知道问题出在了哪里..然后没有办法,只能一步一步的跟着代码走,看更底层的代码来找原因.

 

    发现,返回的response后,是使用jackson来解析的.查看源码可以发现,这里是用jackson转换器来转换返回结果的.如图一,我们在继续往下看...到了图二的地方..这个时候,我们获取的到的返回参数里面.有一个属性叫 Result  而获取到的我们解析对象中的属性列表是[result,returnMsg]这两个.然后方法就找不到对应属性来接口返回值了....从这里往后,返回的对象所有属性就是空值.但又不会抛出错误..这个就是很坑的一个点了.这里可能就有人会说,那我把用来接收返回信息的对象属性,改成首字母大写,这样是不是就可以匹配上了?

 

答案是否定的...读取出来的数据还是[result,returnMsg] 至于为什么读取出来还是一样的.这个没有研究,有兴趣的朋友可以去看看.

                                                                                        (图一)

                                                                       (图二)

 

 

    有人可能会为,为什么你前面说,拿着返回示例在本地解析就可以....那是因为....我本地使用的是 .....................

     com.alibaba.fastjson.JSON 来做JSON转换的........fastjson就可以完美的转换......所有,如果遇到这个问题的朋友,可以试试在调用接口的时候,先不传入接收返回参数的解析对象,等拿到response后,获取body在通过fastjson来转换...这样就不会出问题了.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值