Jackson 复杂对象反序列化为 LinkedHashMap

当客户端向网关POST请求时,Content-Type为application/json,由于JSON序列化,InputParam对象被反序列化为LinkedHashMap,导致远程服务在调用SdeBean.sign方法时出现NoSuchMethodException。错误原因是缺少自定义类的支持。解决办法是在RPC服务端增加类型信息转换,或者利用ObjectMapper的convertValue方法,但需预先知道目标类型。
摘要由CSDN通过智能技术生成

1、情景描述

1. 客户端向网关发起 HTTP POST 请求,Content-Type = application/json,消息体为:

{
    "custid": "client",           // 应用id
    "appid": "sdeserver",         // 服务端id
    "bean": "sdeBean",            
    "method": "sign",
    "args": "[InputParam]"        // InputParam 对象
}

2. 网关接受到请求,通过请求 Body 中的 appid(远程服务在 Zookeeper 中注册的 名称),获取远程服务调用信息(ip + port),然后使用 Netty,与远程服务建立连接,将调用信息发送给 远程服务。

3. 远程服务通过反射,获取 bean 对应的类,使用MethodInvoker ,获取对应的方法。在获取方法时报错:

        java.lang.NoSuchMethodException: com.sde.auth.beans.SdeBean.sign(java.util.LinkedHashMap)

       从错误信息中可以看出,原本 SdeBean.sign(InputParam),实际传入的是 LinkedHash

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值