当前位置: 首页 > news >正文

排查使用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的。

相关文章:

  • python面试
  • 【天梯赛】L2-004 这是二叉搜索树吗(经典问题C++)
  • 笔试专题(四)
  • Ollama及HuggingFace路径环境变量设置
  • 监控易一体化运维:监控易机房管理,打造高效智能机房
  • 51c嵌入式~三极管~合集1
  • 【Python3教程】Python3基础篇之Lambda(匿名函数)
  • AI赋能,防御无界:群联云防护如何颠覆传统DDoS防御格局?
  • 群晖监控套件通过ONVIF协议添加海康摄像头
  • 智慧指路机器人是否支持公共广播功能?
  • MUX VLAN -- PVLAN
  • 【问题解决】Linux安装conda修改~/.bashrc配置文件后,root 用户下显示 -bash-4.2#
  • RCE(自增、取反、异或)
  • Docker 设置国内镜像源
  • C++11--(1)
  • 书籍学习|基于Java+vue的书籍学习平台(源码+数据库+文档)
  • 项目复盘:websocket不受跨域限制的原理
  • MySQL数据库和表的操作
  • 【工具变量】地市地方债、政府债、隐形债相关数据(2007-2023年)
  • 《2核2G阿里云神操作!Ubuntu+Ollama低成本部署Deepseek模型实战》
  • 西安seo网站关键词优化/整合营销传播的六种方法
  • 哈尔滨百度推广代理/惠州seo网站推广
  • 兼职做平面模特网站/谷歌网站优化推广
  • 做网站的为什么不给域名和密码/免费网站seo优化
  • 一个网站备案多个域名吗/长沙seo管理
  • 一个域名一个ip做多个网站/百度sem推广具体做什么