最近在學習微信小程序,遇到了一些坑,有些問題我看官網或者其餘博客,可能講的不是那麼易懂,因此本身找到解決方法後,寫下來供你們參考,若有不對指出,還懇請你們指出~html
好比在實現購物車批量購買的時候,咱們須要向後臺請求一個list,包含全部勾選的物品信息,在微信小程序裏,page裏的data是這樣定義json
data {
orders:[]
}
複製代碼
在咱們給它賦值後,數據相似於小程序
若是咱們利用wx.request把這個list發送的時候,根據微信官方文檔的解釋:微信小程序
data 參數說明api
最終發送給服務器的數據是 String 類型,若是傳入的 data 不是 String 類型,會被轉換成 String 。轉換規則以下:數組
意思就是全部的data數據都會以String類型發送。因此不少朋友可能剛開始和我同樣,請求老是錯誤,或者後臺接收了請求,但是值倒是null。許多博客給的方法好比微信
header: {
'content-type': 'application/json'
},
改成
header: {
'content-type': 'application/x-www-form-urlencoded'
},
複製代碼
我嘗試以後發現請求仍是報錯,下面給出個人解決方法:app
wx.request({
url: 'http://172.20.10.2:8080/order/wx/buy',
header: {
'content-type': 'application/json'
},
method: "POST",
data:{
buyGoodsDTOS:this.data.orders,
user_id:this.data.user_info.user_id
},
複製代碼
data裏面有列表類型的orders,以及一個用戶ID, 咱們就這直接這樣發起請求,orders和user_id都會被序列化爲json學習
利用阿里的fastjson,我使用的SpringBoot
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.46</version>
</dependency>
複製代碼
利用fastjson的JSONObject接收wx序列化後的json數據
經過JSONObject類的源碼,能夠發現他實現類Map接口
public class JSONObject extends JSON implements Map<String, Object>,。。。
複製代碼
能夠知道,它是利用鍵值對存儲微信小程序發送的json數據,存儲方式相似於
JSONArray jsonArray = jsonData.getJSONArray("buyGoodsDTOS"); //根據key名獲取
List<BuyGoodsDTO> list = jsonArray.toJavaList(BuyGoodsDTO.class); //將數組對象轉化爲list,BuyGoodsDTO是與orders裏面對象要對應
String user_id = jsonData.get("user_id").toString(); //獲取user_id
Integer id = Integer.parseInt(user_id); //轉化類型
複製代碼