今天在調(diào)接口的時候遇到一個問題:com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonObject but was com.google.gson.JsonPrimitive憨募。
以為是某些接口有字段名修改導(dǎo)致解析失敗,反復(fù)對照model 和接口返回 json也沒有發(fā)現(xiàn)什么問題。經(jīng)過一番搜索和嘗試之后終于發(fā)現(xiàn)了問題所在乔夯。
首先先解釋一下那兩個類的區(qū)別:com.google.gson.JsonObject 和com.google.gson.JsonPrimitive
com.google.gson.JsonObject就類似于我們定義的 java 對象币励,他是有固定的鍵值對的乳幸。
而 Gson 解析成com.google.gson.JsonPrimitive的原始值飞袋,實際上就是個字符串蔗包,并沒有固定的鍵名稱魂挂。舉個例子吧:
加入有一段 json 是這樣的:
"{"info:"0:aaa","id":0,"name":"zhangsan"}"
那么我們定義的 java object 可能是這樣的:
class Obj{
JsonObject info;
int id;
String name;
}
好甫题,如果此時我們接口返回值是"{"info:"","id":0,"name":"zhangsan"}",duang,報錯了涂召,而且就是上面所說的那個錯誤~
由此各位看官應(yīng)該發(fā)現(xiàn)問題出在哪里了吧坠非,對,就是 info 這個字段果正,我們把他定義成了 JsonObject炎码,而返回的卻是字符串,如果這個字符串有值倒還好秋泳,如果這個字段是空的潦闲,那么 Gson 就不知道怎么把他轉(zhuǎn)成 JsonObject 了迫皱。。。
因此凹炸,解決方案就是:把此類型的字段跟服務(wù)端約定好數(shù)據(jù)格式啤它,客戶端在定義數(shù)據(jù)接口的時候避免直接使用 JsonObject 類型舱痘,一定要自己定義類型衰粹,問題即可解決。
ps:由于只是臨時先記錄一下問題原因誊爹,開發(fā)任務(wù)還比較重频丘,所以排版和語言組織混亂泡态,請見諒某弦。
com.google.gson.JsonSyntaxException: Expected a com.google.gson.JsonObject but was com.google.gso...
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
- 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛤高,“玉大人碑幅,你說我怎么就攤上這事沟涨」埃” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵,是天一觀的道長晰房。 經(jīng)常有香客問我射沟,道長,這世上最難降的妖魔是什么验夯? 我笑而不...
- 正文 為了忘掉前任猖吴,我火速辦了婚禮簿姨,結(jié)果婚禮上簸搞,老公的妹妹穿的比我還像新娘扁位。我一直安慰自己,他們只是感情好域仇,可當(dāng)我...
- 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著寺擂,像睡著了一般暇务。 火紅的嫁衣襯著肌膚如雪泼掠。 梳的紋絲不亂的頭發(fā)上垦细,一...
- 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼茫死!你這毒婦竟也來了跪但?” 一聲冷哼從身側(cè)響起,我...
- 正文 年R本政府宣布剥险,位于F島的核電站,受9級特大地震影響宪肖,放射性物質(zhì)發(fā)生泄漏表制。R本人自食惡果不足惜健爬,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望么介。 院中可真熱鬧娜遵,春花似錦、人聲如沸壤短。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽鸽扁。三九已至蒜绽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桶现,已是汗流浹背躲雅。 一陣腳步聲響...
推薦閱讀更多精彩內(nèi)容
- Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理婆赠,服務(wù)發(fā)現(xiàn)绵脯,斷路器,智...
- 先創(chuàng)建服務(wù)端的APP 1.官網(wǎng)下載Winrun4j悴侵。http://winrun4j.sourceforge.net...
- 清單日:這個階段我們希望你每天有10分鐘讓自己浸染在跟錢相關(guān)的事物里,每天有記賬知道自己的錢到底是怎么花的拭嫁,知道了...
- 問題描述 如果一個數(shù)字能表示為pq(表示冪運算)且p為一個素數(shù),q為大于1的正整數(shù)就稱這個數(shù)叫做超級素數(shù)冪】擅猓現(xiàn)在給...