接口返回数据转化问题

        请求外部接口返回结果中获取的data,如果直接用对象进行强转,则运行的时候会报错java.lang.ClassCastException: class java.lang.Object cannot be cast to class...

Response<Map<String,Object>> response = deviceClient.downFeature(deviceFeatureDto);
ParkingLotDto parkingLotDto = (ParkingLotDto) response.getData().get("data");
return  parkingLotDto;

解决方案:   

        需要借助 com.fasterxml.jackson.databind.ObjectMapper 包下的 convertValue方法可将对象转换为对应的实体类对象,这里我们封装了一个工具类

private static ObjectMapper objectMapper = new ObjectMapper();
 
public static <T> T conveterObject(Object srcObject, Class<T> destObjectType) {
        return objectMapper.convertValue(srcObject,destObjectType);
}

        解决了数据类型转化问题,由于第三方协议的报文中json数据中参数首字母存在大写,在我编辑的对象中直接用该字段进行接收,发现一直返回的是null,原因是:数据在转换成json格式时,采用了默认的转换方式,如果字段首字段大写,那么解析的时候会去找首字段小写对应的字段。

解决方案:

       直接类的属性上添加@JsonProperty  或者@JSONField,数据成功接收。

    private String parkName;

    @JSONField(name="GateInfoList")
    @JsonProperty(value = "GateInfoList")
    private List<GateDto> gateInfoList;

        隔了不久又遇到了相似问题,设备上报的消息在处理后要求直接返回数据,在返回的对象里有属性首字母大写,我属性直接命名成大写,debug看返回对象里的属性还是大写,但是在设备的日志里看返回结果中url字段又变成了小写

在url对象上加上注解@JsonProperty,问题解决。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值