亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

到達控制器時子類型數據丟失

到達控制器時子類型數據丟失

長風秋雁 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 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號