telnet調(diào)用Dubbo接口的坑

一、問(wèn)題:

通過(guò)telnet命令,去調(diào)?使用了dubbo框架的查詢訂單接口,一直調(diào)用出錯(cuò), 查詢后臺(tái)?志,發(fā)現(xiàn)uAccount字段沒(méi)有傳遞過(guò)去,為null。

二、產(chǎn)生問(wèn)題的原因猜測(cè):

  1. uAccount可能類似class字段,在dubbo中特殊處理了。
  2. 反序列化時(shí)出現(xiàn)了問(wèn)題,uAccount這種小寫(xiě)開(kāi)頭,緊跟著的?個(gè)是?寫(xiě)字母的 字段生成的get/set?方法,get/set后面緊跟著的字母是小寫(xiě)。例例setuAccount。

三、源碼追蹤分析:

InvokeTelnetHandler.java

通過(guò)telnet命令調(diào)用的dubbo接口,會(huì)在InvokeTelnetHandler將json字符串轉(zhuǎn)換為對(duì)應(yīng)的請(qǐng)求參數(shù)對(duì)象,在95行中,通過(guò)PojoUtils.realize()方法進(jìn)行轉(zhuǎn)換。


PojoUtils.realize()

在PojoUtils中,主要是通過(guò)realize0這個(gè)方法進(jìn)行反序列化,在438和439來(lái)獲取屬性的set方法或者直接獲取這個(gè)屬性,然后在下面調(diào)用反射調(diào)用set方法或者直接通過(guò)反射賦值。

問(wèn)題產(chǎn)生的關(guān)鍵點(diǎn):

getSetterMethod()

獲取set方法的時(shí)候,把set緊跟的這個(gè)字符轉(zhuǎn)換成了大寫(xiě),也就是setUAccount,咱們通過(guò)idea自動(dòng)生成get/set方法,像這種類型(小寫(xiě)開(kāi)頭,緊跟大寫(xiě)字母)產(chǎn)生的get/set后面緊跟的第一個(gè)字母都是小寫(xiě)字母,所以就獲取不到set方法了。


getField()

getField方法中,由于咱們?cè)O(shè)置的屬性一般都private屬性的,所有這里通過(guò)class.getField()和class.getFields()都獲取不到。

為什么通過(guò)dubbo調(diào)用時(shí)不會(huì)出現(xiàn)該問(wèn)題?

通過(guò)dubbo接口調(diào)用時(shí),會(huì)通過(guò)序列化組件將請(qǐng)求對(duì)象通過(guò)指定的協(xié)議(默認(rèn)hessian2)轉(zhuǎn)換為二進(jìn)制,此方式轉(zhuǎn)化時(shí)不會(huì)出現(xiàn)以上問(wèn)題。

四、總結(jié)

  • 在使用telnet調(diào)用dubbo接口,一定要注意參數(shù)命名的問(wèn)題
  • get/set后面緊跟的的字母不一定是大寫(xiě)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Lua 5.1 參考手冊(cè) by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,264評(píng)論 0 38
  • 說(shuō)明:本文以以下配置進(jìn)行服務(wù)發(fā)布流程分析:注冊(cè)中心:zookeeper;發(fā)布協(xié)議:dobbo 1、服務(wù)發(fā)布流程解析...
    橋頭放牛娃閱讀 2,094評(píng)論 1 15
  • 個(gè)人學(xué)習(xí)批處理的初衷來(lái)源于實(shí)際工作;在某個(gè)迭代版本有個(gè)BS(安卓手游模擬器)大需求,從而在測(cè)試過(guò)程中就重復(fù)涉及到...
    Luckykailiu閱讀 5,001評(píng)論 0 11
  • 對(duì)象的創(chuàng)建與銷毀 Item 1: 使用static工廠方法,而不是構(gòu)造函數(shù)創(chuàng)建對(duì)象:僅僅是創(chuàng)建對(duì)象的方法,并非Fa...
    孫小磊閱讀 2,186評(píng)論 0 3
  • 樊樊 是我大學(xué)本科寢室的室友,也是我的閨蜜,有什么開(kāi)心的、鬧心的事情都會(huì)找她訴說(shuō).前兩天約我去陪她看婚紗照,當(dāng)時(shí)我...
    落地逃閱讀 237評(píng)論 0 0

友情鏈接更多精彩內(nèi)容