为了账号安全,请及时绑定邮箱和手机立即绑定

到达控制器时子类型数据丢失

到达控制器时子类型数据丢失

长风秋雁 2023-04-13 17:08:16
我会把它写得非常简单,因为实际修复不如我不理解的实际设计重要。似乎一旦我的@RequestBody命中@Controller,信息subtype就会丢失。假设我们有:class A{     String foo; }class B extends A{     String bar; }然后另一个将它们组合在一起的类 ( {A,B,B,A}) 将成为请求主体:class Body{     List<A> list; }当从 camel 发送带有ProducerTemplate 的请求时,有两种结果。骆驼将负责路由。如果在同一进程中运行所有内容,带有签名的方法method(Body b)将正确地将信息保存在子类型中。所以 a (B)b.getList().get{1}(获取第二个元素,即 B 并进行转换)将是正确的。当将路由切换到本地主机上不同进程上的存根 (Spring Boot) 并发送完全相同的数据时,相同的方法签名 ( )method(@RequestBody Body b会以某种方式忘记有关 Body 的信息,以至于(B)b.getList().get{1}会出现强制转换异常。为什么会这样?ProducerTemplate接收相同的数据并将其发送到具有相同签名的方法,这些方法可以访问相同的对象类型。唯一的区别是一个与客户端发送请求在同一个进程中运行,而另一个在不同端口的本地主机上运行。
查看完整描述

1 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

我能够继续前进的唯一方法是基本上将 have 更改Body为 haveList<Object>而不是List<A>然后探测 Object 以查看它实际是什么类型并将其转换为该类型。

因为实际问题是 JSON 被序列化然后反序列化,所以字段本身从更改List<A>List<HashMap<String,Object>>


查看完整回答
反对 回复 2023-04-13
  • 1 回答
  • 0 关注
  • 90 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信