我会把它写得非常简单,因为实际修复不如我不理解的实际设计重要。似乎一旦我的@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接收相同的数据并将其发送到具有相同签名的方法,这些方法可以访问相同的对象类型。唯一的区别是一个与客户端发送请求在同一个进程中运行,而另一个在不同端口的本地主机上运行。
千万里不及你
相关分类