axios異步提交表單數據的不一樣形式

踩坑Axios提交form表單幾種格式

先後端分離的開發先後端, 前端使用的vue,後端的安全模塊使用的SpringSecurity,使用postman測試後端的權限接口時發現都正常,可是使用vue+axios發送異步的請求後端一直獲取不出axios提交的form表單的數據,爬坑兩個半鐘頭找到了答案前端

axios用post異步形式提交的數據和咱們直接使用from表單提交的數據的格式(Form Data格式)是不同的,在下面列舉vue

默認格式Request Payload

直接使用axios發送異步請求,沒任何處理的代碼以下:ios

const service = axios.create({})

doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo
    })

這種方式提交的表單格式是默認是RequestPayload, 它的長下面這個樣子npm

能夠看到,它的Contet-type是 "Content-Type": "application/json;"
可是後臺的SpringSecurity對這種結果可不買單,在Request中解析不出任何數據來json

處理成Form Data格式

使用插件qs, 安裝命令以下:axios

npm install --save qs

請求編碼:後端

const service = axios.create({})

  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
       data: qs.stringify(pojo)
    })
  }
  
  或者
  
  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo ,
       transformRequest: [function (data) {
        data = qs.stringify(data);
        return data;
      }],
    })
  }

通過這樣處理的表單數據長成下面的這樣, 這也是咱們最經常使用的Form Data格式,這種格式的數據能夠從後臺的HttpRequest中把提交的屬性解析出來api


其餘類型的Content-Type對應的表單數據格式

const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: qs.stringify(pojo)
       })
  }

它長這樣
安全


const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: pojo
       })
  }
---

const service = axios.create({
  headers: {
      "Content-Type": "multipart/form-data;  charset=utf-8;"
      }
})

 doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data:pojo
       })
  }


const service = axios.create({
  headers: {
      "Content-Type": "application/x-www-form-urlencoded; charset=utf-8;"
  }
})

  doLogin (pojo) {
    return request({
      url: '/api/user/login',
      method: 'post',
      data: qs.stringify(pojo)
    })
  }

相關文章
相關標籤/搜索