微信小程序 POST 傳輸列表

最近在學習微信小程序,遇到了一些坑,有些問題我看官網或者其餘博客,可能講的不是那麼易懂,因此本身找到解決方法後,寫下來供你們參考,若有不對指出,還懇請你們指出~html

好比在實現購物車批量購買的時候,咱們須要向後臺請求一個list,包含全部勾選的物品信息,在微信小程序裏,page裏的data是這樣定義json

data {  
        orders:[]  
    }
複製代碼

在咱們給它賦值後,數據相似於小程序

若是咱們利用wx.request把這個list發送的時候,根據微信官方文檔的解釋:微信小程序

data 參數說明api

最終發送給服務器的數據是 String 類型,若是傳入的 data 不是 String 類型,會被轉換成 String 。轉換規則以下:數組

  • 對於 GET 方法的數據,會將數據轉換成 query string(encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)
  • 對於 POST 方法且 header['content-type'] 爲 application/json 的數據,會對數據進行 JSON 序列化
  • 對於 POST 方法且 header['content-type'] 爲 application/x-www-form-urlencoded 的數據,會將數據轉換成 query string (encodeURIComponent(k)=encodeURIComponent(v)&encodeURIComponent(k)=encodeURIComponent(v)...)

微信對於該部位解釋官網文檔地址服務器

意思就是全部的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

pom.xml裏添加:

<dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.46</version>
    </dependency>
複製代碼

Controller裏面:

利用fastjsonJSONObject接收wx序列化後的json數據

經過JSONObject類的源碼,能夠發現他實現類Map接口

public class JSONObject extends JSON implements Map<String, Object>,。。。
複製代碼

能夠知道,它是利用鍵值對存儲微信小程序發送的json數據,存儲方式相似於

下劃線部分爲key,名稱相同,value就是傳過來的數據。 對於裏面jsonData裏面orders數據(list)的獲取:

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);         //轉化類型
複製代碼

這樣全部的數據都獲取到啦~

相關文章
相關標籤/搜索