我會把它寫得非常簡單,因為實際修復不如我不理解的實際設計重要。似乎一旦我的@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
提交
取消