我会把它写得非常简单,因为实际修复不如我不理解的实际设计重要。似乎一旦我的@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>>
添加回答
举报
0/150
提交
取消