json中的long类型强转的坑

背景

        我的系统上游通过RPC系统调用下游,在传递的时候使用Map<String, Object>进行参数传递。下游直接将Object取出进行强转,如下代码。

Long Value = (Long) request.getParams.get("longVlaueKey"); 

        直接通过RPC调用接口执行的时候不会报错。下游系统是一个流程编排系统,在节点执行失败抛出异常的时候会根据配置进行失败重试。但是失败重试的时候就会报java.lang.Integer cannot be cast to java.lang.Long错误。

        非常奇怪为什么会出现这种问题,通过日志定位到上面这段代码。失败重试的时候入参是通过JSON转化为对象的。这个时候params字段中的longVlaueKey是以int类型来存储的。在JAVA中int类型占用两个字节,long类型占用4个字节。将两个字节的变量强转成4个字节的变量,这明显是不符合要求的。

        以上的问题可以通过下面这段代码复现

public class HelloWorld {
    public static void main(String []args) {
       String s =  "{\"longValue\":123}";
		   JSONObject o = JSON.parseObject(s);
		Long value = (Long)o.get("longValue");
    }
}

        但是为什么RPC调用的时候不会报错呢?如果有大佬知道的话可以交流一下。使用的RPC框架是Dubbo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值