欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 排查使用RestTemplate远程调用,@RequestBody注解接收不到实体类

排查使用RestTemplate远程调用,@RequestBody注解接收不到实体类

2025/4/1 3:23:48 来源:https://blog.csdn.net/duomu_DAT/article/details/146605984  浏览:    关键词:排查使用RestTemplate远程调用,@RequestBody注解接收不到实体类

       做项目学习,使用RestTemplate远程调用,从order订单系统调用pay支付系统,出现使用@Request做远程接收。

        代码的逻辑很简单,但就是没有接收到实体类

1. 猜想是不是没有序列化和初始化方法?

        这个好排查,看Pay和PayDTO实体类是不是没有序列化,两个实体类都已实例化。

        其实在Spring框架下,http传输对象是先将转成Json对象,之后json对象再转成二进制数据在网络传输,所以自定义的对象是不需要序列化的。

        注意:数据在网络传输都需要序列化,自定义的类不需要序列化,是因为http将对象转成Json对象了。

2. 是不是没有传对象类?

        (order系统)先看RestTemplate的方法postForObject将对象类存放到HTTP的什么地方。

        (order系统)进行了httpEntityCallback方法。

        (order系统)进入了HttpEntityRequestCallback方法。

        (order系统)构建了HTTPEntity实体类。

        (order系统)最后将对象类放入了body里。

        (pay系统)所以可以在Request请求体的Body中获取到PayDTO的信息。因为直接断点Controller是获取不到Request的,所以需要构建拦截器对Request进行拦截。

        (pay系统)但是在Request的请求中没有找到Body的信息。

        因为SpringBoot使用的是tomcat服务器,所以去tomcat的官网找body的信息,在debug可以知道Request的实现类似是RequestFacade。

        但在tomcat官网也没有找到body的属性,那就全局搜索,找到了getInputStream的方法获取body。

       (pay系统) 在ServletInputStream中找到了对象,那么对象肯定传输过来了。

3. 注解和配置类有没有问题?

        因为系统是新搭建的,所以配置类几乎没有,一下就排查完,不是配置类的问题。        

        那么就有可能是注解的问题的。经过排查,发现了用错了RequestBody的注解,使用到了swagger的RequestBody。

        结论: 其实是引用错包了,用了swagger的RequestBody,正确应使用Springframework的。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词