Flutter 使用Dio請求返回數據不是Json字符串,而是Json對象

今天用使用Dio加載數據的時候出現一個異常,就是返回的數據是一個json對象,而不是json字符串,導致無法使用json解析。

錯誤返回如下:

{title: book, content: think in java}

正常數據應該是這樣的:

{"title":"book","content":"think in java"}

經過一番查找後發現官網上有一段備註的:

在這裏插入圖片描述
說當響應頭的content-type爲"application/json"時,dio會自動將json轉換成json對象,並且responseType默認是json類型接收

於是就在攔截器中打印請求頭,如下:
在這裏插入圖片描述
發現請求頭中啥都沒有。或者是application/json(content-type是application/json的時候,我又把它設置爲空了)

解決辦法

沒辦法只能谷歌搜索dio will parse response string to json,沒想到stackoverflow 也有人遇到同樣的問題:
https://stackoverflow.com/questions/55666787/how-to-fix-type-errors-when-parsing-json-in-flutter

解決辦法是:將responseType 設置爲ResponseType.plain,默認使用json接收的。
在這裏插入圖片描述
這樣就可以接收到正常的json字符串了。

總結

其實我這邊用了兩個接口來測試的,一個是人家的接口,不需要設置content-type和response-type也能獲得正常的json字符串。

出現問題的數據則是我們公司的後臺接口,所以這個問題具體原因還真不好說。但是使用okhttp確可以獲得正常的數據。

所以我估計的是拿到的數據應該就是json數據,所以不需要再使用json類型來接收,使用plain就行了
在這裏插入圖片描述
可以看到,使用json來接收的話,它會把我們的數據再次裝換一次,就成了不能解析的對象了。而使用plain只是重新編碼了以下。

所以具體使用json還是其他類型,需要根據實際情況來決定。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章