使用restTemplate过程中遇到的问题

一、post请求使用对象传参时字段名首字母自动变小写

因为以往接口字段名一般首字母都是小写,所以从未遇到过问题,但是这次字段名均为全大写,调用接口时一直返回参数异常。经过排查发现,传参的字段名全部变成了首字母小写。

原因

restTemplate使用jackson序列化,jackson的属性发现机制为:

被public修饰的字段 >> 被public修饰的getter >> 被public修饰的setter

我的属性都是私有的,所以Jackson是通过我的get方法获取的字段名,而java的内省机制,导致了我字段名首字母小写。

内省(Introspector)是Java 语言对Bean类属性、事件的一种缺省处理方法。例如类 A 中有属性 name, 那我们可以通过 getName,setName 来得到其值或者设置新的值。通过 getName/setName 来访问 name 属性,这就是默认的规则。
一个类被当作javaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量,通过去掉set方法前缀,然后取剩余部分,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小写。

解决方案

  1. 使用Gson序列化,Gson是直接使用字段名
  2. 直接使用Map传参,不使用实体类
  3. 在实体类上加注解:@JsonAutoDetect(fieldVisibility= JsonAutoDetect.Visibility.ANY,getterVisibility= JsonAutoDetect.Visibility.NONE),表示设置字段属性可见而取消get检测

二、postForObject接收参数时报转换错误

我们一般在对接三方接口时,已知响应参数的情况下会使用对象接收。
然而我在接收过程中遇到了问题,对方响应的是application/octet-stream,对象是无法接收的。

我目前的解决方案是直接使用String接收,再去解析json字符串

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值